Django 管理画面の list_filter で参照された ForeignKeys のみを表示するようにできますか? 質問する

Django 管理画面の list_filter で参照された ForeignKeys のみを表示するようにできますか? 質問する

次のような 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

RelatedOnlyFieldListFilterDjango 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からアップグレードできない場合は、内部の、文書化されていないFilterSpecAPIを使用する必要があります。Stack Overflowの質問Django Admin のカスタム フィルターあなたを正しい方向に導くはずです。

おすすめ記事