我正在尝试为名为" Customer"的外键设置初始值。在我的基于模型的形式名为" LocationForm"使用form = LocationForm(initial={'customer':Customer.objects.get(id=1)})
但表单未通过验证。
我在form.py文件中隐藏了这个带有小部件的输入,因此我测试了启用输入并选择" Customer"在表单中手动并通过验证。当我试图设置初始值时,我做错了什么?
#views.py
def add_location(request):
if request.POST:
form = LocationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/django/location')
else:
form = LocationForm(initial={'customer':Customer.objects.get(id=1)})
return render(request, 'add_location.html', {'form': form})
#forms.py
class LocationForm(forms.ModelForm):
class Meta:
model = Location
widgets = {'customer': forms.HiddenInput}
#models.py
class Customer(models.Model):
name = models.CharField(max_length=50)
...
def __unicode__(self):
return self.name
class Location(models.Model):
customer = models.ForeignKey(Customer)
name = models.CharField(max_length=100)
...
def __unicode__(self):
return self.name
更新 我弄清楚问题是什么。即使您指定其中一个字段是forms.py中的HiddenInput,您仍然需要在模板中包含表单的标记。我在add_location.html文件中包含以下内容,现在可以使用了:
<div class="fieldWrapper">
{{ form.customer.errors }}
{{ form.customer }}
</div>
我应该注意到我正在做一个自定义表单模板而不是通用{{form.as_p}}。如果我这样做了,我相信它会起作用。我认为在进行自定义表单模板时没有实际的理由来进行隐藏输入。
答案 0 :(得分:0)
您可以从表单中排除hiddenfield并在开始保存对象之前填充该字段:
class LocationForm(forms.ModelForm):
class Meta:
model = Location
exclude = ('customer',)
def add_location(request):
if request.POST:
form = LocationForm(request.POST)
if form.is_valid():
entry = form.save(commit=False)
entry.customer = Customer.objects.get(id=1)
entry.save()
return HttpResponseRedirect('/django/location')
else:
form = LocationForm()
return render(request, 'add_location.html', {'form': form})