- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Django 的保存功能保存实体调用“Persona”的记录,但是当我尝试插入新对象时,我收到 1048 IntegrityError,因为出于某种原因 Django 在无法插入的字段上添加 NULL null 且是外键(该字段是 GeneroID,它是表 Genero 的外键),即使我正确传递值,也会在插入语句期间出现此情况。奇怪的是,我在“Genero”表上有值,并且我正确捕获了 POST 上传递的值,即使我打印该值,我也得到了传递的值,但出于任何奇怪的原因,DJango 在 GeneroID 字段上添加 Null。
我正在将 MySQL 与 InnoDB 和 Django 1.8 一起使用。我的模型是从旧数据库生成的。
模型GENERO
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'
模特人物
class Persona(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
nombre = models.CharField(db_column='Nombre', max_length=50) # Field name made lowercase.
apellido1 = models.CharField(db_column='Apellido1', max_length=50) # Field name made lowercase.
apellido2 = models.CharField(db_column='Apellido2', max_length=50) # Field name made lowercase.
numeroidentificacion = models.CharField(db_column='NumeroIdentificacion', unique=True, max_length=50) # Field name made lowercase.
observaciones = models.CharField(db_column='Observaciones', max_length=255) # Field name made lowercase.
fechanacimiento = models.DateField(db_column='FechaNacimiento') # Field name made lowercase.
direccionfoto = models.CharField(db_column='DireccionFoto', max_length=500) # Field name made lowercase.
genero = models.ForeignKey(Genero, db_column='GeneroID',null=False) # Field name made lowercase.
pais = models.ForeignKey(Pais, db_column='PaisID') # Field name made lowercase.
lugarnacimiento = models.CharField(db_column='LugarNacimiento', max_length=100) # Field name made lowercase.
direccion = models.ForeignKey(Direccion, db_column='DireccionID') # Field name made lowercase.
profesion = models.CharField(db_column='Profesion', max_length=200) # Field name made lowercase.
puesto = models.CharField(db_column='Puesto', max_length=200) # Field name made lowercase.
lugartrabajo = models.CharField(db_column='LugarTrabajo', max_length=100) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Persona'
查看.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 年 6 月 28 日 - 17:26:12Django 版本 1.8.2,使用设置“WhiteKoala.settings”在http://127.0.0.1:8000/启动开发服务器使用 CONTROL-C 退出服务器。
通用对象
Pais:Pais对象
{'sql': "插入 Persona
(Nombre
, Apellido1
, Apellido2
, NumeroIdentificacion
、Observaciones
、FechaNacimiento
、DireccionFoto
、GeneroID
、PaisID
, LugarNacimiento
, DireccionID
, Profesion
, Puesto
, LugarTrabajo
) VALUES ('ANDREW ', '丰塞卡', 'RIVAS', '', '', NULL, '', NULL, NULL, '', NULL, '', '', '')", '时间': '0.000'}[2015 年 6 月 28 日 17:26:13]“POST/guardarpersona/HTTP/1.1”200 8
错误:
/guardarpersona/处的完整性错误(1048,“列‘GeneroID’不能为空”)
此外,这里是一个文件夹,其中包含一些有关我的模型、view.py、生成的 SQL 语句和错误的图片: https://www.dropbox.com/sh/wr3ve7cn9b0ofpm/AAD-57RXZGkxld74eCPhakERa?dl=0
知道我做错了什么吗?我是 Django 的新手,希望得到帮助和建议。
最佳答案
编辑
我重读了你的问题,我想我明白出了什么问题。您停止设置属性:
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.get(id=persona[8]['value']) # must `get` instead of `filter`
print(pais)
lugarnacimiento = persona[7]['value']
direccion = temp
profesion = persona[9]['value']
puesto = persona[10]['value']
lugartrabajo = persona[11]['value']
保存前将这些属性更改为 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()
如果您的对象不是 None,那么它应该保存。
<小时/>原文:
看起来您的外键是一个不可为空的外键:
genero = models.ForeignKey(Genero, db_column='GeneroID',null=False)
如果您将其更改为:
genero = models.ForeignKey(Genero, db_column='GeneroID',null=True)
那么它可以为空。
但是,IntegrityError 看起来错误是在数据库级别,因此在模型定义中修复此问题并不能完全解决问题。 IntegrityError
表明数据库实际上抛出了错误,因此您必须查看表定义和约束。
您是否使用带或不带 South 的 Django 来设置表( syncdb
或 migrate
)?如果是这样,那么您必须在进行此编辑后运行迁移。
如果不是,那么您将需要发出必要的正确后续语句,以使该列在数据库中可为 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
并传入空字符串。
关于python - DJANGO 在保存时添加 NULL - IntegrityError at/****/(1048, "***' 不能为 null"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102519/
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
这个问题在这里已经有了答案: Can we subtract NULL pointers? (4 个回答) 关闭 2 个月前。 是否定义了NULL - NULL? (char *)NULL - (ch
是否有推荐的方法(根据 .net Framework 指南)检查 null,例如: if (value == null) {//code1} else {//code2} 或 if (value !=
我正在尝试将值插入数据库,但出现这样的错误任何人都可以告诉我为什么该值为空,如下所示: An exception occurred while executing 'INSERT INTO perso
这个问题在这里已经有了答案: String concatenation with a null seems to nullify the entire string - is that desire
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
下面的 SQL 表定义说明了从我的 MYSQL 数据库创建表的语句之一,该数据库是由我公司的前开发人员开发的。 DROP TABLE IF EXISTS `classifieds`.`category
我主要有应用程序开发背景。在编程语言中 variable == null或 variable != null有效。 当涉及到 SQL 时,以下查询不会给出任何语法错误,但也不会返回正确的结果。 sel
我在尝试检查某些元素是否为 NULL 时遇到段错误或不。任何人都可以帮忙吗? void addEdge(int i, int j) { if (i >= 0 && j > 0)
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。 SELECT reader.name FROM reader LEFT JOIN book_borrow ON reader.ca
我正在尝试使用三元运算符来检查值是否为 null 并返回一个表达式或另一个。将此合并到 LINQ 表达式时,我遇到的是 LINQ 表达式的 Transact-SQL 转换试图执行“column = n
我在给定的代码中看到了以下行: select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &timeout); http://linux
var re = /null/g; re.test('null null'); //> true re.test('null null'); //> true re.test('null null')
这个问题在这里已经有了答案: 关闭 13 年前。 我今天避开了一场关于数据库中空值的激烈辩论。 我的观点是 null 是未指定值的极好指示符。团队中有意见的其他每个人都认为零和空字符串是可行的方法。
由于此错误,我无法在模拟器中运行我的应用: Error:null value in entry: streamOutputFolder=null 或 gradle - Error:null value
我正在尝试在 Android 应用程序中创建电影数据库,但它返回错误。知道这意味着什么吗? public Cursor returnData() { return db.query(TABLE
我一直在检查浏览器中的日期函数以及运行时间 new Date (null, null, null); 在开发工具控制台中,它给出了有效的日期 Chrome v 61 回归 Sun Dec 31 189
为什么 NA==NULL 会导致 logical (0) 而不是 FALSE? 为什么 NULL==NULL 会导致 logical(0) 而不是 TRUE? 最佳答案 NULL 是一个“零长度”对象
我是一名优秀的程序员,十分优秀!