一尘不染

我可以在django admin中使list_filter只显示引用的ForeignKey吗?

django

我有一个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()

admin类MyModel如下所示:

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

Country表包含约250个国家。在某些MyModel情况下,实际上仅引用了少数几个国家。

问题是django管理员中的列表过滤器在过滤器面板中列出了所有国家。列出所有国家/地区(而不仅仅是实例引用的国家/地区)在这种情况下非常不利于使用列表过滤器的目的。

是否有一些仅MyModel在列表过滤器中显示作为参考的国家?(我使用Django 1.3。)


阅读 396

收藏
2020-04-01

共1个答案

一尘不染

从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。Django Admin中的堆栈溢出问题自定义过滤器应为你指明正确的方向。

2020-04-01