我正在尝试在一个页面上创建一个使用多个模型的表单。模型互相参考。我无法获取表单进行验证,因为我无法弄清楚如何将表单中使用的两个模型的id添加到表单中以验证它。我在模板中使用了一个隐藏的键,但我无法弄清楚如何使它在视图中工作
我的代码如下:
的观点:
def the_view(request, a_id,):
if request.method == 'POST':
b_form= BForm(request.POST)
c_form =CForm(request.POST)
print "post"
if b_form.is_valid() and c_form.is_valid():
print "valid"
b_form.save()
c_form.save()
return HttpResponseRedirect(reverse('myproj.pro.views.this_page'))
else:
b_form= BForm()
c_form = CForm()
b_ide = B.objects.get(pk=request.b_id)
id_of_a = A.objects.get(pk=a_id)
return render_to_response('myproj/a/c.html',
{'b_form':b_form,
'c_form':c_form,
'id_of_a':id_of_a,
'b_id':b_ide })
模型
class A(models.Model):
name = models.CharField(max_length=256, null=True, blank=True)
classe = models.CharField(max_length=256, null=True, blank=True)
def __str__(self):
return self.name
class B(models.Model):
aid = models.ForeignKey(A, null=True, blank=True)
number = models.IntegerField(max_length=1000)
other_number = models.IntegerField(max_length=1000)
class C(models.Model):
bid = models.ForeignKey(B, null=False, blank=False)
field_name = models.CharField(max_length=15)
field_value = models.CharField(max_length=256, null=True, blank=True)
形式
from mappamundi.mappa.models import A, B, C
class BForm(forms.ModelForm):
class Meta:
model = B
exclude = ('aid',)
class CForm(forms.ModelForm):
class Meta:
model = C
exclude = ('bid',)
B有一个外键引用A,C有一个外键引用B.由于模型是相关的,我想在一个页面上有它们的表单,1个提交按钮。因为我需要填写B和C&表格的字段。我不想从下拉列表中选择B的id,我需要以某种方式将B形式的id添加到表单中,以便它将进行验证。我在模板中有一个隐藏字段,我只需要在视图中找到如何做到这一点
答案 0 :(得分:5)
你拥有的代码几乎是正确的。只是做:
if b_form.is_valid() and c_form.is_valid():
print "valid"
b = b_form.save()
c = c_form.save(commit=False)
c.b = b
c.save()