mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 03:42:11 +01:00 
			
		
		
		
	Improve Django-admin interface, inlines and filters
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
		@@ -3,13 +3,45 @@
 | 
			
		||||
 | 
			
		||||
from django.contrib import admin
 | 
			
		||||
from django.contrib.admin import ModelAdmin
 | 
			
		||||
from django.contrib.auth.admin import UserAdmin
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicParentModelAdmin
 | 
			
		||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicParentModelAdmin, \
 | 
			
		||||
    PolymorphicInlineSupportMixin, StackedPolymorphicInline
 | 
			
		||||
 | 
			
		||||
from .models import CoachRegistration, ParticipantRegistration, Payment, Registration, \
 | 
			
		||||
    StudentRegistration, VolunteerRegistration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RegistrationInline(StackedPolymorphicInline):
 | 
			
		||||
    class StudentRegistrationInline(StackedPolymorphicInline.Child):
 | 
			
		||||
        model = StudentRegistration
 | 
			
		||||
        autocomplete_fields = ('team',)
 | 
			
		||||
        show_change_link = True
 | 
			
		||||
 | 
			
		||||
    class CoachRegistrationInline(StackedPolymorphicInline.Child):
 | 
			
		||||
        model = CoachRegistration
 | 
			
		||||
        autocomplete_fields = ('team',)
 | 
			
		||||
        show_change_link = True
 | 
			
		||||
 | 
			
		||||
    class VolunteerRegistrationInline(StackedPolymorphicInline.Child):
 | 
			
		||||
        model = VolunteerRegistration
 | 
			
		||||
        show_change_link = True
 | 
			
		||||
 | 
			
		||||
    model = Registration
 | 
			
		||||
    child_inlines = (
 | 
			
		||||
        StudentRegistrationInline,
 | 
			
		||||
        CoachRegistrationInline,
 | 
			
		||||
        VolunteerRegistrationInline,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PaymentInline(admin.TabularInline):
 | 
			
		||||
    model = Payment
 | 
			
		||||
    extra = 0
 | 
			
		||||
    autocomplete_fields = ('registrations',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@admin.register(Registration)
 | 
			
		||||
class RegistrationAdmin(PolymorphicParentModelAdmin):
 | 
			
		||||
    child_models = (StudentRegistration, CoachRegistration, VolunteerRegistration,)
 | 
			
		||||
@@ -97,12 +129,34 @@ class VolunteerRegistrationAdmin(PolymorphicChildModelAdmin):
 | 
			
		||||
 | 
			
		||||
@admin.register(Payment)
 | 
			
		||||
class PaymentAdmin(ModelAdmin):
 | 
			
		||||
    list_display = ('id', 'concerned_people', 'grouped', 'type', 'valid', )
 | 
			
		||||
    search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',)
 | 
			
		||||
    list_display = ('concerned_people', 'tournament', 'team', 'grouped', 'type', 'amount', 'valid', )
 | 
			
		||||
    search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',
 | 
			
		||||
                     'registrations__team__name', 'registrations__team__participation__team__trigram',)
 | 
			
		||||
    list_filter = ('registrations__team__participation__valid', 'type',
 | 
			
		||||
                   'grouped', 'valid', 'registrations__polymorphic_ctype',)
 | 
			
		||||
                   'grouped', 'valid', 'registrations__team__participation__tournament', 'final',)
 | 
			
		||||
    autocomplete_fields = ('registrations',)
 | 
			
		||||
    actions = ('mark_as_valid', 'mark_as_pending', 'mark_as_invalid',)
 | 
			
		||||
 | 
			
		||||
    @admin.display(description=_('concerned people'))
 | 
			
		||||
    def concerned_people(self, record: Payment):
 | 
			
		||||
        return ", ".join(f"{reg.user.first_name} {reg.user.last_name}" for reg in record.registrations.all())
 | 
			
		||||
 | 
			
		||||
    @admin.action(description=_('Mark as valid'))
 | 
			
		||||
    def mark_as_valid(self, request, queryset):
 | 
			
		||||
        queryset.update(valid=True)
 | 
			
		||||
 | 
			
		||||
    @admin.action(description=_('Mark as pending'))
 | 
			
		||||
    def mark_as_pending(self, request, queryset):
 | 
			
		||||
        queryset.update(valid=None)
 | 
			
		||||
 | 
			
		||||
    @admin.action(description=_('Mark as invalid'))
 | 
			
		||||
    def mark_as_invalid(self, request, queryset):
 | 
			
		||||
        queryset.update(valid=False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
admin.site.unregister(User)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@admin.register(User)
 | 
			
		||||
class UserCustomAdmin(PolymorphicInlineSupportMixin, UserAdmin):
 | 
			
		||||
    inlines = [RegistrationInline]
 | 
			
		||||
 
 | 
			
		||||
@@ -589,6 +589,8 @@ class Payment(models.Model):
 | 
			
		||||
    @property
 | 
			
		||||
    def team(self):
 | 
			
		||||
        return self.registrations.first().team
 | 
			
		||||
    team.fget.short_description = _("team")
 | 
			
		||||
    team.fget.admin_order_field = 'registrations__team__trigram'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def tournament(self):
 | 
			
		||||
@@ -596,6 +598,8 @@ class Payment(models.Model):
 | 
			
		||||
            from participation.models import Tournament
 | 
			
		||||
            return Tournament.final_tournament()
 | 
			
		||||
        return self.registrations.first().team.participation.tournament
 | 
			
		||||
    tournament.fget.short_description = _("tournament")
 | 
			
		||||
    tournament.fget.admin_order_field = 'registrations__team__participation__tournament'
 | 
			
		||||
 | 
			
		||||
    def get_checkout_intent(self, none_if_link_disabled=False):
 | 
			
		||||
        if self.checkout_intent_id is None:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user