from django.contrib import admin from django.contrib.contenttypes.admin import GenericStackedInline from django.contrib.auth.models import User from .models import Profile, Corporation, Adherent class AdherentInline(GenericStackedInline): model = Adherent ct_field = 'adherent_type' ct_fk_field = 'adherent_id' extra = 0 def get_max_num(self, request, obj=None, **kwargs): if obj is None or obj.adhesion is None: return 1 else: return 0 class ProfileAdmin(admin.ModelAdmin): list_display = ('__str__', 'phone_number',) inlines = (AdherentInline,) class AdherentTypeFilter(admin.SimpleListFilter): title = 'type d’adhérent' parameter_name = 'type' def lookups(self, request, model_admin): return ( ('physique', 'Personne physique'), ('morale', 'Personne morale'), ) def queryset(self, request, queryset): if self.value() == 'physique': return queryset.filter(adherent_type__app_label='auth', adherent_type__model='user') if self.value() == 'morale': return queryset.filter(adherent_type__app_label='adhesions', adherent_type__model='corporation') class AdherentAdmin(admin.ModelAdmin): list_display = ('id', 'adherent_name', 'type',) list_filter = (AdherentTypeFilter,) fields = ('id', 'contribution',) def adherent_name(self, obj): return str(obj) adherent_name.short_description = 'Nom ou raison sociale' def has_add_permission(self, request): return False class CorporationAdmin(admin.ModelAdmin): inlines = (AdherentInline,) admin.site.register(Profile, ProfileAdmin) admin.site.register(Corporation, CorporationAdmin) admin.site.register(Adherent, AdherentAdmin)