错误:
app_a.desc_id may not be NULL
我相信我的问题是,当我保存时,我没有将id
从formB
传递给formA
。请引导我找到解决这个问题的方法。
以下是我的观点:
def form(request):
if request.method == 'GET':
formB = BForm()
formA = AForm()
return render(request,r'app/form.html',{'formA':formA,'formB':formB})
elif request.method == 'POST':
formA = AForm(request.POST)
formB = BForm(request.POST)
formB.save()
formA.save()
return HttpResponseRedirect('/log')
以下是我的模特:
# Descprition
class B(models.Model):
id = models.AutoField(primary_key=True)
description = models.CharField(max_length=50)
# Title
class A(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField('Name',max_length=20)
desc = models.ForeignKey(B)
这是我的表格:
class BForm(forms.ModelForm):
class Meta:
model = B
fields = ['description']
class AForm(forms.ModelForm):
class Meta:
model = A
fields = ['name']
答案 0 :(得分:2)
您的程序有多个错误,但主要问题是因为desc
是class A
中指向class B
的外键,而您没有null=True
在它上面,这意味着你永远不希望那个字段为空。换句话说,A
的每个实例都应该有一个外键desc
。
如果您只是save()
这两种表单,formA
会尝试保存A
的实例,而没有desc
字段的值,因此会出错。您应该将formB
创建的实例分配给formA
创建的实例:
new_b = formB.save()
new_a = formA.save(commit=False)
new_a.desc = new_b
new_a.save()
您的计划中的其他问题,包括从未调用form.is_valid()
,有冗余id
字段(django会为您创建一个)。我建议你在进入编码之前首先阅读django教程。它可以节省很多时间,比如搞清楚这样的错误。