次のような 2 つのモデルを持つ 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管理画面のリストフィルタがすべての国をリストしますフィルター パネルで、すべての国 (インスタンスによって参照されている国だけでなく) をリストすると、この場合、リスト フィルターを使用する目的がほとんど達成されません。
MyModel
リスト フィルターで選択肢として参照される国のみを表示するものはありますか? (私は Django 1.3 を使用しています。)
ベストアンサー1
RelatedOnlyFieldListFilter
Django 1.8 以降では、関連する国を表示するために使用できる が組み込まれています。
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の質問Django Admin のカスタム フィルターあなたを正しい方向に導くはずです。