我试图保存使用Django的保存功能的实体调用'Persona'的记录,但是当我尝试插入新对象我得到一个1048 IntegrityError,因为出于任何原因,Django在不能为null并且是外键的字段上添加NULL(该字段是GeneroID,它是表Genero的外键),这期间插入语句,即使我正确传递值。 奇怪的是,我在'Genero'表上有值,并且我正确捕获了在POST上传递的值,即使我打印出值,但是出于任何奇怪的原因,DJango在GeneroID字段上添加Null。DJANGO添加NULL保存 - IntegrityError在/ **** /(1048,“***'不能为空”)
我在InnoDB和Django 1.8上使用MySQL。我的模型是从传统数据库生成的。
模型的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'
模型PERSONA
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'
VIEW.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:12 Django版本1.8.2,使用设置'WhiteKoala.settings' 正在启动开发服务器http://127.0.0.1:8000/ 使用CONTROL-C退出服务器。
的Genero对象
派斯:派斯对象
{ 'SQL':“INSERT INTO Persona
(Nombre
,Apellido1
,Apellido2
,NumeroIdentificacion
,Observaciones
,FechaNacimiento
,DireccionFoto
,GeneroID
,PaisID
,LugarNacimiento
,DireccionID
, ('ANDREW','FONSECA','RIVAS','','',NULL,'',NULL,NULL,'',NULL,'','','')“ ,'time':'0.000'} [28 /月/ 2015年17时26分13秒] “POST/guardarpersona/HTTP/1.1” 200 8
ERROR:在
IntegrityError/guardarpersona/ (1048,“列GeneroID'不能是空“)
而且,这里是我的模型,view.py一些照片的文件夹,已生成的SQL语句和错误: https://www.dropbox.com/sh/wr3ve7cn9b0ofpm/AAD-57RXZGkxld74eCPhakERa?dl=0
什么我做错了任何想法?我是Django的新成员,希望能给予帮助和建议。
你可以发布多一点你的堆栈跟踪? – NightShadeQueen
当然!我加了几条线! – Salas