Django Grappelli 管理ツールを使用して、次のように、ForeignKey (多対 1) フィールドをドロップダウン フィールドではなくオートコンプリート ウィジェットとして表示するように構成できます。
class MyModel(models.Model):
related = models.ForeignKey(RelatedModel, related_name='my_models')
class MyModelAdmin(admin.ModelAdmin):
raw_id_fields = ('related',)
autocomplete_lookup_fields = {
'fk': ['related'],
}
しかし、私がやりたいのは、他の(1 対多) 方向 (つまり、RelatedModel の管理で、1つ以上の MyModel オブジェクトを検索できるようにするため) のオートコンプリート ウィジェット ルックアップを定義することです。今、私は ModelMultipleChoiceField を使用しています:
class RelatedModelForm(forms.ModelForm):
class Meta:
model = RelatedModel
fields = ('my_models',)
my_models = forms.ModelMultipleChoiceField(queryset=MyModel.objects.all())
def __init__(self, *args, **kwargs):
super(SaleAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['foods'].initial = self.instance.foods.all()
def save(self, *args, **kwargs):
instance = super(RelatedModelForm, self).save(commit=False)
self.fields['my_models'].initial.update(related=None)
self.cleaned_data['my_models'].update(related=instance)
return instance
class RelatedModelAdmin(admin.ModelAdmin):
model = RelatedModel
form = RelatedModelForm
ただし、そのタイプのウィジェットでうまく機能するには MyModel インスタンスが多すぎます。ModelMultipleChoiceField の代わりに、MyModel オブジェクトのオートコンプリート ルックアップ ウィジェットを 1 つ以上用意するのが理想的です。
Grappelli には、FK リレーションと m2m リレーションのオートコンプリート ルックアップを作成する簡単な方法がありますが、1 対多リレーションの方法はありますか? これらのオートコンプリートは、他の 2 種類のリレーションと同じように役立つように思われるので、Grappelli はそこでも簡単な方法を提供すると推測していましたが、見つけられませんでした...