Django создает собственный фильтр list_filter - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу создать собственный фильтр list_filter на AvariaAdmin, чтобы проверить, пусто ли env_emp или нет, я не знаю, как это сделать

Мои МОДЕЛИ

class Avaria(models.Model):
    .......
class Pavimentacao(models.Model):

    avaria = models.ForeignKey(Avaria, related_name='AvariaObjects',on_delete=models.CASCADE)
    env_emp= models.DateField(blank=True,null=True)
    .....

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

В вашем файле admin.py зарегистрируйте модель Avaria примерно так:

class EmptyDateFilter(admin.SimpleListFilter):
    title = _('empty date')
    parameter_name = 'env_emp'

    def lookups(self, request, model_admin):
        return (
            ('all', 'All'),
            ('has_no_date', 'Has no date')
        )

    def queryset(self, request, queryset):
        value = self.value()
        if value == 'all':
           return queryset
        isnull = (value == "has_no_date")
        return queryset.filter(AvariaObjects__env_emp__isnull=isnull)

@admin.register(Avaria)
class AvariaAdmin(admin.ModelAdmin):
    list_filter = (EmptyDateFilter, )

Более подробную информацию вы можете найти в документации list_filter

0 голосов
/ 18 февраля 2019

Вы можете использовать поиск поля isnull, чтобы проверить, является ли пустое поле пустым:

Pavimentacao.objects.filter(env_emp__isnull=True)
...