2009-06-29 3 views
0

この問題は非常に奇妙で、私は誰かが私を助けることを望んでいます。議論のために、私はBookモデルとForeignKeyの関係を持つAuthorモデルを持っています。私が著者を表示するとき、その著者に関連する書籍のみを表示するChoiceFieldを持っていたいと思います。したがって、私はAuthorFormをオーバーライドします。 ()メソッドを作成し、著者IDに基づいて書籍をフィルタするクエリに基づいて、選択肢リスト(タプル)を作成します。タプルは、書籍IDと書籍名(すなわち、(1、 'Moby Dick'))の複合体である。これらの「選択肢」は、ModelFormの選択肢属性に割り当てられます。ModelFormでの不思議な動作と保存

テンプレートでフォームがレンダリングされると、ChoiceFieldが正しく表示され、その著者に関連付けられた書籍のみがリストされます。

これは物事が奇妙になる場所です。

フォームを保存すると、ValueErrorが返されます(「u'1 ':Author.book」はBookインスタンスでなければなりません)。このエラーはFKの関係で意味があります。コードに "print"ステートメントを追加し、それ以外の変更を加えずにレコードを保存すると、それはうまくいきます。ValueErrorが魔法のように消えてしまいます。毎回作品

誰もがあなたが間違って何をしているか

+0

はあなたが何を印刷しているの?コードを表示できますか? –

答えて

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) 
+0

カスタマイズしたマネージャを提供してください。 –

+0

素晴らしい提案!完璧に働いた。ありがとうございました! – Huuuze

関連する問題