DJANGO在/***/(1048,“***”不能为NULL)的SAVE IntegrityError上添加NULL

2024-10-04 05:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Django的save函数保存实体调用“Persona”的记录,但当我试图插入新对象时,我得到了1048 IntegrityError,因为出于任何原因,Django在一个不能为NULL且是外键的字段上添加了NULL(该字段是表generado的外键),在insert语句期间,即使我正确地传递了值。 奇怪的是,我在'gendo'表中有值,并且我正确地捕捉了传递给POST的值,即使我打印了传递的值,但出于任何奇怪的原因DJango在generaid字段上添加了Null。在

我在InnoDB和django1.8中使用MySQL。我的模型是从遗留数据库生成的。在

模型慷慨

class Genero(models.Model):
id = models.AutoField(db_column='ID', primary_key=True)  # Field name made lowercase.
genero = models.CharField(db_column='Genero', max_length=50)  # Field name made lowercase.

class Meta:
    managed = False
    db_table = 'Genero'

模范人物

^{pr2}$

在视图.PY在

def guardarpersona(request):
direccion = json.loads(request.POST['direccion[]'])
persona = json.loads(request.POST['persona[]'])
temp = Direccion()
temp.descripcion = direccion[1]['value']
temp.distrito = Distrito.objects.get(pk=direccion[0]['value'])
temp.save()

p = Persona()
p.nombre = persona[1]['value']
p.apellido1 = persona[2]['value']
p.apellido2 = persona[3]['value']
numeroidentificacion = persona[4]['value']
observaciones = persona[12]['value']
fechanacimiento = persona[6]['value']
direccionfoto = ''
genero = Genero.objects.get(pk=persona[5]['value'])
print(genero)
pais = Pais.objects.filter(id=persona[8]['value'])
print(pais)
lugarnacimiento = persona[7]['value']
direccion = temp
profesion = persona[9]['value']
puesto = persona[10]['value']
lugartrabajo = persona[11]['value'] 

try:
    p.save()
except Exception:
    from django.db import connection
    print (connection.queries[-1])
return HttpResponse('Success!')      

已生成DJANGO SQL语句:

系统检查未发现问题(0静音)。 2015年06月28日17:26:12 Django版本1.8.2,使用设置'白考拉。设置' 在http://127.0.0.1:8000/启动开发服务器 使用CONTROL-C退出服务器

慷慨对象

Pais:Pais对象

{{}(PersonaPersonaNombreApellido1Apellido2NumeroIdentificacionNumeroIdentificacion,^{{},^{{},^{},^{},^{},LugarNacimiento,^{},^{{{{},{{

错误:

完整性错误/担保人/ (1048,“列‘慷慨’不能为空”)

还有,这是一个文件夹,里面有我模特的照片,视图.py,已生成SQL语句,错误: https://www.dropbox.com/sh/wr3ve7cn9b0ofpm/AAD-57RXZGkxld74eCPhakERa?dl=0

你知道我做错了什么吗?我是Django的新手,希望能得到帮助和建议。在


Tags: 对象djangodbvaluemodelsrequestsave语句
2条回答

改变

genero = models.ForeignKey(Genero, db_column='GeneroID',null=False)

^{pr2}$

将null更改为“True”会通知django此字段(gengo)可以保留为null。因此,没有完整性错误。在

别忘了移民。在

编辑

我重读了你的问题,我想我知道出了什么问题。您已停止设置属性:

p = Persona()
p.nombre = persona[1]['value']
p.apellido1 = persona[2]['value']
p.apellido2 = persona[3]['value']

出于某些原因,您停止在此处设置属性:

^{pr2}$

保存之前,请将这些属性更改为Persona上的属性:

p.numeroidentificacion = persona[4]['value']
p.observaciones = persona[12]['value']
p.fechanacimiento = persona[6]['value']
p.direccionfoto = ''
p.genero = Genero.objects.get(pk=persona[5]['value'])
p.pais = Pais.objects.get(id=persona[8]['value'])
p.lugarnacimiento = persona[7]['value']
p.direccion = temp
p.profesion = persona[9]['value']
p.puesto = persona[10]['value']
p.lugartrabajo = persona[11]['value'] 

之后,尝试保存它:

 p.save()

如果你的对象不是无,那么它应该保存。在


原创:

看起来您的ForeignKey是不可为null的ForeignKey:

genero = models.ForeignKey(Genero, db_column='GeneroID',null=False)

如果将其更改为:

genero = models.ForeignKey(Genero, db_column='GeneroID',null=True)

那么它可以为null。在

然而,IntegrityError使错误看起来是在数据库级别,因此在模型定义中修复此错误并不能完全解决问题。IntegrityError表明数据库实际上抛出了错误,因此您必须查看表定义和约束。在

您是否使用Django来设置表(syncdb或{})?如果是这样,则必须在进行此编辑后运行迁移。在

如果不是,则需要发出适当的sequel语句,以使该列在数据库中可为null。在

警告1:不要在没有测试的情况下简单地运行以下命令

警告2:如果您的应用程序依赖于迁移(South或在Django中是本机迁移),请使用它而不是下面的方法!

如果您的应用程序不依赖于South或Django迁移,并且您已经(或过去有人)手动管理了表,那么您将需要发出SQL语句来修改表,以在这里接受一个可为NULL的值。在

执行此操作的SQL通常如下所示:

ALTER TABLE `db_name`.`appname_persona`
MODIFY COLUMN `GeneroID` int(11) DEFAULT NULL;

此外,看起来您正在为上面的许多字段传入NULL值,而模型定义中没有任何内容是可以为null的,因此您必须对每个希望经常为空的字段重复此练习,或者您可以将CharField定义为包含blank=True并传入空字符串。在

相关问题 更多 >