ModelForm 的 Django 编辑模板未填充值

Posted

技术标签:

【中文标题】ModelForm 的 Django 编辑模板未填充值【英文标题】:Django edit template for ModelForm is not being filled in with values 【发布时间】:2011-12-27 06:03:19 【问题描述】:

我有一个 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(r'^new/credit/$', views.edit, , 'crds_newCredit'),
url(r'^edit/credit/(?P<id>\d+)/$', views.edit, , 'crds_editCredit'),

【问题讨论】:

【参考方案1】:

@xizor 使用链接而不是按钮来重定向到编辑表单,因为使用该按钮您可能会将帖子发送到视图。

PS:请原谅我的英语,如果您认为它更有用,请编辑此答案。

【讨论】:

太棒了!就是这样,我对这类事情知之甚少——你能告诉我为什么会这样吗?为什么发送 POST 不起作用,但链接起作用? 您也可以使用按钮,但作为链接,在按钮的 onClick 事件中放置一个 javascript 函数以将页面重定向到编辑表单。但是,如果您将按钮包含在表单标签中并将属性 acction='post' 添加到此表单中,当您对该按钮进行提交时,您将向视图发送一条发布消息。

以上是关于ModelForm 的 Django 编辑模板未填充值的主要内容,如果未能解决你的问题,请参考以下文章

django ModelForm在模板中显示中文

使用 Django,如何在模板中动态设置 ModelForm 字段值?

Django之ModelForm详解

Django-profiles 自定义创建/编辑 modelForm 未正确保存

如何使用 Ajax 在 Django 中更新 modelForm

Django form&ModelForm