unsafe_where_true
unsafe_where_true

Reputation: 6320

django admin: queryset filter not working

I have the following class in my admin site:

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

In my understanding, this should return only objects for which MyClass.is_default is True.

EDIT The MyClass model only has:

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

However, what happens is I get all objects of MyClass. Only 2 are set to True! That's really weird to me....

django 1.7.7

Upvotes: 1

Views: 1102

Answers (1)

Rod Xavier
Rod Xavier

Reputation: 4043

If you want to only show objects where is_default=True, you can override the queryset method in your model admin.

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

Update:

As @pawel commented, the queryset() method was renamed to get_queryset() from Django 1.6.

Upvotes: 1

Related Questions