You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django保存数据遇IntegrityError:外键非空约束失败

问题原因

错误IntegrityError at / NOT NULL constraint failed: kullanici_arizamodel.p_id_id的核心原因:

  • arizaModel的p_id是关联personelModel的外键,默认带有非空约束
  • ArizaBilgileriForm仅包含a_aciklama字段,未提供外键p_id的输入项
  • 保存ariza_bilgileri时,未手动关联刚创建的personel_bilgileri实例,导致外键字段为空,触发数据库约束校验错误
解决方案

修改views.py中的保存逻辑,先创建未提交到数据库的arizaModel实例,手动关联外键后再完成保存:

from django.shortcuts import render
from kullanici.forms import PersonelBilgileriForm, ArizaBilgileriForm
    
def kullaniciArizaKaydetView(request):
    # GET请求初始化空表单
    if request.method == 'GET':
        form1 = PersonelBilgileriForm(prefix='personel_bilgileri')
        form2 = ArizaBilgileriForm(prefix='ariza_bilgileri')
    else:
        form1 = PersonelBilgileriForm(request.POST, prefix='personel_bilgileri')
        form2 = ArizaBilgileriForm(request.POST, prefix='ariza_bilgileri')
        if form1.is_valid() and form2.is_valid():
            personel_bilgileri = form1.save()
            # 创建ariza实例但暂不提交到数据库
            ariza_bilgileri = form2.save(commit=False)
            # 关联刚创建的personel实例
            ariza_bilgileri.p_id = personel_bilgileri
            # 提交到数据库完成保存
            ariza_bilgileri.save()
                  
    return render(request, 'kullanici.html',{'PersonelBilgileriForm': form1, 'ArizaBilgileriForm': form2})
额外业务逻辑优化

你的arizaModel中a_kapanma_tarihi字段使用了auto_now_add=True,会在创建故障记录时就将关闭时间设为当前时间,不符合实际业务逻辑(故障关闭时间应在问题解决后设置),建议修改字段定义:

a_kapanma_tarihi = models.DateTimeField(null=True, blank=True, verbose_name='Kapanma Tarihi')

后续可在故障处理完成时,手动更新该字段的值。

内容的提问来源于stack exchange,提问作者Uygar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:51