2012-02-05 8 views
1

は、簡単な質問かもしれませんが、私はのModelFormを持っている場合:Django:フォームにインスタンスを渡すと、is_valid()が呼び出され、インスタンスフィールドが検証されますか?

class ExampleModelForm(forms.ModelForm): 
    class Meta: 
     exclude = ['username'] 

私はフォームを使用すると、私は他の場所から持っているユーザ名を挿入したいのですが、まだそれは検証を行ってみたいですプロセス。私が使用している場合:

instance = ExampleModel(username='Foobar') 
form = ExampleModelForm(request.POST, instance=instance) 

if form.is_valid(): 
    form.save() 

ユーザー名 'Foobar'はフォームの残りのフィールドと同じ検証を行いますか?

おかげで、

J

答えて

2

それは除外されている場合は、[いいえ、フォームもユーザ名フィールドが含まれていません。

フォームでフィールドの検証を実行する場合は、POST辞書を変更する必要があります。

post = request.POST.copy() 
post['username'] = 'Foobar' 

form = ExampleForm(post) 
+0

興味深いことに、モデルインスタンスをフォームにバインドすると実際にはどうなりますか?関連するノートでは、あなたが上記の提案をしても、フォームのメタで除外されているので、フィールドを検証しません。 – jvc26

+0

@jvcの場合、フォームはそのインスタンスを構成するのではなく、その特定のインスタンスを編集します(つまり、ユーザー名が含まれていますが、フィールドは除外されているためフォームの検証を受けません)。はい、もちろん、ModelFormから 'username'を除外しなければなりません。 –

+0

優れています。答えに乾杯!!除外された変数を挿入する方法はありますか、あまりにも遠すぎるのですか? – jvc26

関連する問題