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

Country个表格包含了大约250个国家.实际上,只有少数几个国家被MyModel个实例引用.

问题是,在Django adminlists ALL countries中的过滤列表在过滤面板中.在本例中,列出所有国家(而不仅仅是某个实例引用的国家)几乎违背了使用过滤这个列表的目的.

在过滤列表中有没有一些国家只显示百位引用的国家作为选项?(我使用的是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升级,则需要使用内部的、无文档记录的FilterSpecAPI.堆栈溢出问题Custom Filter in Django Admin应该会为您指明正确的方向.

Django相关问答推荐

自定义公钥打破Django管理内联逻辑

与django相关的预取n +1问题.我该怎么解决呢?

DRF中没有参数的视图的警告-壮观

为什么Docker compose没有这样的文件或目录?

我的Django终结点不访问HAS_OBJECT_PERMISSION方法

访问默认的 django-allauth 登录和注册页面时出现 TemplateSyntaxError

防止 Django 从表单集中保存特定表单

"" 需要有字段 "id" 的值才能使用这种多对多关系

Django 长时间运行带有线程/处理的异步任务

Playframework 和 Django

恢复 Django 1.7 RemoveField 迁移

使用基于日期/时间的对象进行 Django 单元测试

django npm 和 node 包架构

在 Django 中获取下一个和上一个对象

如何在python中遍历httprequest post变量

django类型对象Http404没有属性get

django.core.exceptions.ImproperlyConfigured:请求设置 USE_I18N,但未配置设置

如何在不同的元素上添加注释?

如何在字段集中显示 Django 管理内联模型?

'function' 对象没有属性 'as_view'