list_filter с вариантами выбора в качестве значений

#python #django #django-admin

#python #django #django-администратор

Вопрос:

У меня есть Billing модель с логическим полем

 class Billing(models.Model):
    ...
    is_paid = models.BooleanField(verbose_name='Statut', default=False, choices=[(True, 'Payée'), ('False', 'Non payée')])
    ...
  

Это администратор Django

 class BillingAdmin(BaseOnlyModelAdmin):
    ...
    list_display = ['month', 'year', 'date', 'is_paid']
    list_filter = ['is_paid']
    ...
  

is_paid корректно отображается как Payée / Non payée при перечислении

введите описание изображения здесь

Но для list_filter этого он переведен на Oui / Non

введите описание изображения здесь

Как я могу изменить это поведение? Я хочу, чтобы он отображался choices , чтобы он выглядел так

введите описание изображения здесь

Ответ №1:

Я смог исправить это, внедрив пользовательский фильтр списка

 from django.contrib.admin import SimpleListFilter

class BillingStatusFilter(SimpleListFilter):
    title = 'Statut'
    parameter_name = 'is_paid'

    def queryset(self, request, queryset):
        if self.value():
            return queryset.filter(is_paid__exact=self.value())
    
    def lookups(self, request, model_admin):
        return model_admin.model.STATUS
  
 list_filter = [BillingStatusFilter]