2015-09-17 2 views
0

У меня есть следующий класс в моем администратора сайта:Джанго администратора: QuerySet фильтр не работает

class MyClassAdmin(admin.ModelAdmin): 
    options = forms.ModelMultipleChoiceField(queryset=MyClass.objects.filter(is_default=True), widget=FilteredSelectMultiple("verbose name", is_stacked=False)) 

В моем понимании, это должно возвращать только те объекты, для которых MyClass.is_default является True.

EDIT MyClass только модель имеет:

class MyClass(models.Model): 
    is_default = models.BooleanField(default=False, help_text="is default")   
    name = models.CharField(help_text="the name of this", max_length=50) 

    def __unicode__(self): 
     return self.name 

Однако то, что происходит, я получаю все объекты MyClass. Только 2 установлены на True! Это действительно странно для меня ....

Джанго 1.7.7

+0

Можете ли вы добавить свои модели? –

+0

P.S. ранее поле называлось «по умолчанию», которое, как я думал, может конфликтовать ... поэтому я просто переименовал его в is_default и сделал миграции – faboolous

+0

Что вы пытаетесь достичь в своем администраторе модели? Немного непонятно, почему у вас есть переменная 'options' в администраторе модели. –

ответ

1

Если вы хотите показывать только объекты, где is_default=True, вы можете переопределить метод queryset в вашей модели администратора.

class MyClassAdmin(admin.ModelAdmin):  
    def queryset(self, request): 
     qs = super(MyClassAdmin, self).queryset(request) 
     return qs.filter(is_default=True) 

Update:

Как @pawel прокомментировал, метод queryset() был переименован в get_queryset() из Django 1.6.

+0

В django 1.6 он был переименован в 'get_queryset' –

+0

@ PawełPolewicz спасибо за исправление –

Смежные вопросы