Djangoを学ぶための小さなプロジェクトを作っています.ModelForm内の隠しフィールドを使用しようとするといくつかの問題があります。DjangoのHiddenInputを持つModelFormが無効を返す
クラスTheresの:
class Post(models.Model):
title = models.CharField(max_length = 140)
message = models.CharField(max_length = 10000)
pub_date = models.DateTimeField()
そして、私のModelForm:
class PostForm(ModelForm):
class Meta:
model = Post
fields = ('title', 'message', 'pub_date',)
widgets = {
'message' : Textarea(attrs={'cols':80, 'rows':20}),
'pub_date' : HiddenInput(),
}
これは図である。
def edit(request, post_id):
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
print 'VALID'
dados = form.cleaned_data
post = Post.objects.get(pk=post_id)
post.title = dados['title']
post.message = dados['message']
post.save()
return HttpResponseRedirect(reverse('blog.views.detail', args=(post.id,)))
else:
print 'INVALID'
form = PostForm(instance=Post.objects.get(pk=post_id))
return render_to_response('blog/add_post.html', {'form' : form,}, context_instance = RequestContext(request))
これは、フォームのために生成されたHTMLです:
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='3b7c0735bf464fb4fd7dcd3011050e1c' />
</div>
<tr>
<th><label for="id_title">title:</label></th>
<td><input id="id_title" type="text" name="title" value="asd1111111111" maxlength="140" /></td>
</tr>
<tr>
<th><label for="id_message">message:</label></th>
<td><textarea id="id_message" rows="20" cols="80" name="message">asd11111111111</textarea>
<input type="hidden" name="pub_date" value="2010-12-19 17:08:22.498000" id="id_pub_date" /></td>
</tr>
投稿の作成と編集に同じテンプレートを使用します。私が作成しているとき、pub_dateは別のビューで設定されています。私が編集しているときに、私のテンプレートのpub_dateを変更することはできません。 この例では、form.is_valid()
は常にFalseを返します。 フォームから'pub_date' : HiddenInput(),
行を削除すると、Trueが返されます。 私は何が間違っていますか?
(隠しフィールドで)生成されたページのHTMLとは何ですか? – Robert
Ops、質問に追加するのを忘れてしまった。完了しました。 –
'form.errors'を印刷するとどうなりますか? – Robert