【问题标题】:Django - id null - foreign key errorDjango - id null - 外键错误
【发布时间】:2016-05-11 19:20:56
【问题描述】:

错误:

app_a.desc_id may not be NULL

我相信我的问题是保存时我没有将idformB 传递到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']

【问题讨论】:

    标签: sql django python-2.7 django-forms


    【解决方案1】:

    您的程序有多个错误,但主要问题是因为descclass 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 教程。像这样找出错误会节省很多时间。

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 2017-10-20
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2019-07-27
      • 2018-10-20
      相关资源
      最近更新 更多