2017-02-08 7 views
0

У меня есть следующий классне удается разрешить ключевое слово «XXX» в поле

class Advert(models.Model): 
    ... 
    title = models.TextField (
     verbose_name = 'Job Title', 
    ) 
    advertiser = models.TextField (
     verbose_name = 'Advertiser', 
    ) 
    first_advert = models.DateField (
     verbose_name = 'First Advertised', 
     default = datetime.date.today 
    ) 
    last_advert = models.DateField (
     verbose_name = 'Last Advertised', 
     default = datetime.date.today 
    ) 

    def posted_once(self): 
     return (self.last_advert == self.first_advert) 
    posted_once.short_description = 'Posted Once' 

В admin.py Я пытаюсь использовать posted_once для фильтра

class AdvertAdmin(admin.ModelAdmin): 
    list_display = ['first_advert','last_advert',] 
    ordering = ['-last_advert','first_advert'] 
    actions = [extract,] 
    list_filter = ('posted_once',) 

Но я получаю

Невозможно разрешить ключевое слово 'posted_once' в поле

погрешность. Помоги мне, пожалуйста.

ответ

1

Вы не можете использовать функцию в качестве фильтра списка.

list_filter должен быть список или кортеж элементов, где каждый элемент должен быть одного из следующих типов:

  • имя поля, в котором указанное поле должно быть либо BooleanField, CharField, DateField, DateTimeField, IntegerField, ForeignKey или ManyToManyField

  • класс наследует от django.contrib.admin.SimpleListFilter, который вы должны предоставить title и parameter_name атрибуты и переопределить queryset методы lookups и

  • кортеж, в котором первый элемент представляет собой имя поля, а второй элемент представляет собой класс наследующий django.contrib.admin.FieldListFilter

Так что для вашего дела, вы хотите, либо подкласс SimpleListFilter или FieldListFilter like the examples in the docs.