2

我有这样的 Django 模型:

from django.db import models
from django_countries.fields import CountryField

class Profile(models.Model):
    name = models.CharField(max_length=200)
    country = CountryField()

在管理员中,我想按国家/地区过滤。但是当我添加country到时list_filter,我会在右侧得到一个包含所有国家/地区的巨大列表。有没有办法将过滤器列表限制为仅包含实际至少分配的国家/地区Profiles

这是相似的,但不是重复的,我可以在 django admin 中制作 list_filter 以仅显示引用的 ForeignKeys 吗?. 请注意,我在这里使用的是django_countries,而不是 ForeignKey,这使得这个问题有所不同。

注意:我使用的是 Django 1.7,所以我无权访问 RelatedOnlyFieldListFilter。

4

1 回答 1

1
class CountryListFilter(admin.SimpleListFilter):
    title = 'Country'
    parameter_name = 'country'

    def lookups(self, request, model_admin):
        countries = set([t.country for t in model_admin.model.objects.filter(country!=None)])
        return [(country, country)for country in countries]

    def queryset(self, request, queryset):
        if self.value():
            return queryset.filter(country=self.value())
        else:
            return queryset
于 2015-09-02T09:27:38.040 回答