我有一个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如下所示:
MyModel
class MyModelAdmin(admin.ModelAdmin): list_display = ('name', 'country',) list_filter = ('country',) admin.site.register(models.MyModel, MyModelAdmin)
该Country表包含约250个国家。在某些MyModel情况下,实际上仅引用了少数几个国家。
Country
问题是django管理员中的列表过滤器在过滤器面板中列出了所有国家。列出所有国家/地区(而不仅仅是实例引用的国家/地区)在这种情况下非常不利于使用列表过滤器的目的。
是否有一些仅MyModel在列表过滤器中显示作为参考的国家?(我使用Django 1.3。)
从Django 1.8开始,有一个内置的RelatedOnlyFieldListFilter,你可以用来显示相关的国家。
RelatedOnlyFieldListFilter
class MyModelAdmin(admin.ModelAdmin): list_display = ('name', 'country',) list_filter = ( ('country', admin.RelatedOnlyFieldListFilter), )
对于Django 1.4-1.7,list_filter允许你使用的子类SimpleListFilter。应该可以创建一个简单的列表过滤器,列出所需的值。
SimpleListFilter
如果无法从Django 1.3升级,则需要使用内部未FilterSpec公开的api。Django Admin中的堆栈溢出问题自定义过滤器应为你指明正确的方向。
FilterSpec