我可以让list_filter在django管理中只显示引用的ForeignKeys?

我有一个django应用程序有两个模型,像这样:

class MyModel(models.Model):
    name = models.CharField()
    country = models.ForeignKey('Country')

class Country(models.Model):
    code2 = models.CharField(max_length=2, primary_key=True)
    name = models.CharField()

MyModel的管理类如下所示:

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'country',)
    list_filter = ('country',)
admin.site.register(models.MyModel, MyModelAdmin)

国家表包含〜250个国家。只有少数几个国家实际上被一些MyModel实例引用。

问题是,django管理员中的列表过滤器列出了过滤器面板中的所有国家/地区。列出所有国家(而不只是那些被实例引用的)在这种情况下几乎击败了列表过滤器的目的。

有没有一些只显示由MyModel引用的国家作为列表过滤器中的选择? (我使用Django 1.3。)

至于Django 1.8,有一个内置的RelatedOnlyFieldListFilter,你可以用来显示相关国家。

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'country',)
    list_filter = (
        ('country', admin.RelatedOnlyFieldListFilter),
    )

对于Django 1.4-1.7,list_filter允许你使用SimpleListFilter的子类。应该可以创建一个列出所需值的简单列表过滤器。

如果你不能从Django 1.3升级,你需要使用内部和未记录的FilterSpec api。 Stack Overflow问题Custom Filter in Django Admin应该指向正确的方向。

http://stackoverflow.com/questions/12215751/can-i-make-list-filter-in-django-admin-to-only-show-referenced-foreignkeys

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:我可以让list_filter在django管理中只显示引用的ForeignKeys?