我熟悉使用模板来收集数据,但在显示时,Django会以智能方式显示字段并使用正确的值填充它们。我当然可以手动完成,但模型知道字段类型。我没有看到任何关于此的文档。例如,我从模板收集数据:
<strong>Company Name</strong>
<font color="red">{{ form.companyname.errors }}</font>
{{ form.companyname }}
其中form是包含所有字段的公司模型。我将如何确保我可以使用这种类型的方法,以便Django渲染文本字段并填充当前值。例如,有一种方法可以通过以下方式发送值:
myid = int(self.request.get('id'))
myrecord = Company.get_by_id(myid)
category_list = CompanyCategory.all()
path = os.path.join(os.path.dirname(__file__), 'editcompany.html')
self.response.out.write(template.render(path, {'form': myrecord, 'category_list': category_list}))
我可以对记录执行相同操作吗?模板是否会填充发送的值?感谢
答案 0 :(得分:3)
听起来您可能会对Form
与ModelForm
的差异和正确用法感到困惑
无论您使用哪种类型的表单,表单的模板方面都保持不变: 注意:表单中的所有值(只要绑定到POST或具有实例)都将在渲染时预先填充。
<form class="well" action="{% url member-profile %}" method="POST" enctype="multipart/form-data">{% csrf_token %}
<fieldset>
{{ form.non_field_errors }}
{{ form.display_name.label_tag }}
<span class="help-block">{{ form.display_name.help_text }}</span>
{{ form.display_name }}
<span class="error">{{ form.display_name.errors }}</span>
{{ form.biography.label_tag }}
<span class="help-block">{{ form.biography.help_text }}</span>
{{ form.biography }}
<span class="error">{{ form.biography.errors }}</span>
<input type="submit" class="button primary" value="Save" />
</fieldset>
</form>
如果您想从记录中填充表单(或将表单作为记录提交),最好使用ModelForm
EX不显示用户FK下拉列表的个人资料表单:
class ProfileForm(forms.ModelForm):
"""Profile form"""
class Meta:
model = Profile
exclude = ('user',)
观点:
def profile(request):
"""Manage Account"""
if request.user.is_anonymous() :
# user isn't logged in
messages.info(request, _(u'You are not logged in!'))
return redirect('member-login')
# get the currently logged in user's profile
profile = request.user.profile
# check to see if this request is a post
if request.method == "POST":
# Bind the post to the form w/ profile as initial
form = ProfileForm(request.POST, instance=profile)
if form.is_valid() :
# if the form is valid
form.save()
messages.success(request, _(u'Success! You have updated your profile.'))
else :
# if the form is invalid
messages.error(request, _(u'Error! Correct all errors in the form below and resubmit.'))
else:
# set the initial form values to the current user's profile's values
form = ProfileForm(instance=profile)
return render(
request,
'membership/manage/profile.html',
{
'form': form,
}
)
注意外部else
使用实例form = ProfileForm(instance=profile)
初始化表单,并且表单提交使用post初始化表单,但仍然绑定到实例form = ProfileForm(request.POST, instance=profile)
答案 1 :(得分:0)
如果您正在查看表单,那么从Django的forms framework开始,特别是forms for models,似乎是一个好主意。