Django模型表单编辑模板未填充值
我有一个模型表单(ModelForm),我已经创建了一个视图和模板,用来往数据库里添加数据。现在我想扩展这个功能,让用户点击一个按钮后可以编辑数据。但是当他们点击按钮后,表单/模板页面出现了,我却看到“这个字段是必填的”这样的提示,所有的字段都是空的,而不是我传入的实例的值。虽然我在修改这些值时,数据库里的相应数据会被正确更新,但问题是,虽然主键是传递过去了,但值却没有显示出来。如果有人能告诉我我哪里做错了,我会非常感激。另外,我是以这篇帖子为基础的:Django edit form based on add form?,所以请不要只把我送到那篇帖子去。
以下是我的文件
模型表单
class CreditCardForm(forms.ModelForm):
class Meta:
model = CreditCard
fields = ('name_on_card','card_number','contact_number_on_card')
视图
def edit(request, id=None, template_name='article_edit_template.html'):
if id:
print "Edit Mode"
card = get_object_or_404(CreditCard, pk=id)
if card.card_owner != request.user:
raise HttpResponseForbidden()
else:
print "Create Mode"
card = CreditCard(card_owner=request.user)
if request.POST:
print "request.POST"
form = CreditCardForm(request.POST, instance=card)
if form.is_valid():
print "is_valid()"
form.save()
# If the save was successful, redirect to another page
# redirect_url = reverse(article_save_success)
return HttpResponseRedirect('/cards/')
else:
print "else"
form = CreditCardForm(instance=card)
return render_to_response(
'create_credit.html',
{'form': form,},
context_instance=RequestContext(request)
)
模板
{% include "base.html" %}
<form action="" method="post">{% csrf_token %}
<fieldset>
<legend>Required</legend>
<div class="fieldWrapper">
{{ form.name_on_card.errors }}
<label for="id_topic">Name as it appears on card:</label>
{{ form.name_on_card }}
</div>
<div class="fieldWrapper">
{{ form.card_number.errors }}
<label for="id_topic">Last 6 digits of card number:</label>
{{ form.card_number }}
</div>
</fieldset>
<fieldset>
<legend>Optional</legend>
<!-- This is for Credit Card's Only -->
<div class="fieldWrapper">
{{ form.contact_number_on_card.errors }}
<label for="id_topic">Institution contact number: 1-</label>
{{ form.contact_number_on_card }}
</div>
</fieldset>
<p><input type="submit" value="Save"></p>
</form>
URL
url(r'^new/credit/$', views.edit, {}, 'crds_newCredit'),
url(r'^edit/credit/(?P<id>\d+)/$', views.edit, {}, 'crds_editCredit'),
1 个回答
3
@xizor 建议用链接代替按钮来跳转到编辑表单,因为用按钮的话,你可能会向视图发送一个POST请求。
PS:请原谅我的英语,如果你觉得有必要,可以编辑这个回答,让它更有用。