1つの管理ページに共存する必要があるいくつかの相互関連するモデルがあります。Django管理者インラインフォーム - 外部キークエリセットを値のセットに限定する
劇場の制作にはキャストメンバーがあり、キャストメンバーには特定の役割が割り当てられています。劇場の制作は、書かれたテキスト(演劇、順応など)に関連し、書かれたテキストは、そのテキストのすべての役割のリストを保持します。プロダクションを追加するときは、各キャストメンバをそれらのロールのいずれかに関連付ける必要があります。
モデル:生産、人、キャストメンバー、役割、WrittenText
関係:生産と人がキャストメンバーを通じてM2M関係を持って、「役割」フィールドを追加します。ここ
は、データモデルが機能している方法です - Roleオブジェクトへの外部キー。ロール自体には、WrittenTextオブジェクトへの外部キーがあります。
これは問題です。プロダクションの管理ページでは、TabularInlineを使用してCastMembersを追加しています。テーブルのCastMemberエントリは、 'ロール'フィールドを、Productionが参照するWrittenTextで指定されたロールに限定する必要があります。
私はモデルフォームをオーバーライドすることによって、問題への途中のソリューションを作った:class CastMemberForm(ModelForm):
class Meta:
model = CastMember
def __init__(self, *args, **kwargs):
super(CastMemberForm, self).__init__(*args, **kwargs)
if 'instance' in kwargs:
self.fields['role'].queryset = Role.objects.filter(source_text=self.instance.production.source_text)
しかし、あなたは、ドロップダウンから人を選択し保存し、役割を選択した場合のみ動作それ以外の場合は、すべてのロールのリストが表示されます。 kwargsで "if"インスタンスを取り出すと、私にDoesNotExistErrorが返されます。
これはちょうどクライアント側のJSのようなものがなければやってもあまりにも複雑すぎるのですか、それとも簡単な解決策がありますか?
この問題の解決策を見つけましたか?/ –