0

この問題は非常に奇妙で、誰かが私を助けてくれることを願っています。議論のために、私は Book モデルへの ForeignKey 関係を持つ Author モデルを持っています。著者を表示するとき、その著者に関連付けられた本のみを表示する ChoiceField が必要です。そのため、AuthorForm をオーバーライドします。init () メソッドを使用して、著者 ID に基づいて本をフィルター処理するクエリに基づいて、選択肢 (タプル) のリストを作成します。タプルは、本の ID と本の名前を組み合わせたものです (つまり、(1, 'Moby Dick'))。これらの「選択肢」は、ModelForm のchoices 属性に割り当てられます。

フォームがテンプレートでレンダリングされると、ChoiceField が適切に表示され、その著者に関連付けられた本のみが一覧表示されます。

これは物事が奇妙になるところです。

フォームを保存すると、ValueError が返されます (Cannot assign "u'1'":Author.book" must be Book instance). このエラーは、FK 関係により理にかなっています。コードにステートメントを追加し、他に変更を加えず、レコードを保存すると、機能します. ValueError は魔法のように消えます. これを何度も試して、うっかり別の変更を加えていないことを確認しました.

ここで何が起こっているか知っている人はいますか?

4

1 に答える 1

2

何が間違っているのかよくわかりませんが、クエリセットを変更するのが最善です:

class ClientForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.affiliate = kwargs.pop('affiliate')
        super(ClientForm, self).__init__(*args, **kwargs)
        self.fields["referral"].queryset = Referral.objects.filter(affiliate = self.affiliate)

    class Meta:
        model = Client

上記は私のプロジェクトの 1 つであり、渡されたアフィリエイトに関連する紹介オブジェクトのみを表示するために完全に機能します。

form = ClientForm(affiliate=request.affiliate)
于 2009-06-29T18:49:58.590 に答える