我可以在 django admin 中设置 list_filter 只显示引用的外键吗?

2024-03-15

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

The Country表包含约 250 个国家/地区。一些人实际上只提到了少数几个国家MyModel实例。

问题是 django admin 中的列表过滤器列出所有国家在过滤器面板中。列出所有国家/地区(而不仅仅是实例引用的国家/地区)几乎违背了在这种情况下使用列表过滤器的目的。

是否有一些只显示引用的国家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 https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter允许您使用的子类SimpleListFilter。应该可以创建一个简单的列表过滤器来列出您想要的值。

如果您无法从 Django 1.3 升级,则需要使用内部的、未记录的、FilterSpecAPI。堆栈溢出问题Django 管理中的自定义过滤器 https://stackoverflow.com/questions/991926/custom-filter-in-django-admin应该为你指明正确的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 django admin 中设置 list_filter 只显示引用的外键吗? 的相关文章

随机推荐