2012-01-16 15 views
0

"instance"パラメータでオブジェクトを初期化しようとしていますが、フォームには入りません。それは必須ですので、is_validは失敗します。誰か助言してもらえますか?私はそれが簡単な間違いだとはほとんど思っていますが、見つけられません。ModelForm "instance"パラメータと外部キーフィールド

FORM:views.py

if businessid: 
    b = Business.objects.get(id=businessid) 
    category = b.category 
    assert(b.owner == request.user) or request.user.is_staff 
    #form = forms.BusinessEditForm(request.POST, instance=b) 
else: 
    assert category.is_public or request.user.is_staff 
    b = Business(owner=request.user, category_id=category.id) 
    # form = forms.BusinessEditForm(request.POST, instance=b) 
    isNew = True 

if request.method == "POST": 
    form = forms.BusinessEditForm(request.POST, instance=b) 

    if form.is_valid(): 

from django.forms import ModelForm 

from tagging.forms import TagField 

class BusinessEditForm(ModelForm): 
tags = TagField() 

class Meta: 
    model = Business 
    exclude = ('owner', 'pub_date') 

ロジックこの最後の行はFalseに検証します。

助けを歓迎します。あなたがいるなら

if request.method == "POST": 
    form_data = request.POST.copy() 
    form_data['instance'] = b 
    form = forms.BusinessEditForm(form_data) 
+1

'BusinessEditForm'クラスを置くと助けになります(ModelFormから継承しますか?)。 :(form_data [ "カテゴリ"]) "カテゴリ" でform_dataかない場合 –

+0

元のメッセージで更新おかげで、しかし、基本的には答えはイエスである) –

答えて

0

は、多分あなたは、このような何かを試すことができますフォーム内の必須フィールドを除外するには、フォームが有効なBusinessオブジェクトを作成しないため、is_valid()を呼び出す前にプログラマチックに設定する必要があります。これはis_valid()Falseを返す理由です。あなたのフォームにクリーンな方法を書くことができ、あなたの意見を乱雑にすることなく

+0

は\t \t form_data = request.POST.copy() \t \tを使用しました \t \t \t form_data [「カテゴリ」] = category.id そして、それは動作します - そのためのおかげで:)しかし、私は適切な方法は...その仕事をする「インスタンス」のため、これは明らかである –

0

:あなたはそれがフォームデータの一部であるかのようにフォームにinstanceを渡す必要がある場合

おかげで、 イゴール

+0

だと思うが、私はでした'instance'はそれを実行していると仮定します –

+0

返されたインスタンスに実際に設定されているフィールドがある場合にのみそうします。私はそれがそうでなければ、これはエラーを返さないだろうと仮定しています。 – jknupp

0

def clean(self): 
    self.cleaned_data.update(excluded_field=self.instance.excluded_field) 
    return super(YourForm, self).clean() 

しかし、あなたは、インスタンスが指定されていると、あなたの除外フィールドが設定されていることを、あなたのフォーム__init__メソッドでも要求すべきです。

関連する問題