在django模型中缺少自动生成的id

时间:2017-01-25 20:22:25

标签: python django

我有一个班级,我跳过了id自动生成的定义,因为Django会为你做这个。

当我实例化myClass并保存记录时,我有这个:

instance = Cotization(value1, value2, value3, value4, value5)
instance.save()

它给了我一个关于值3的错误。

我看到如果不是3个值,我在开始时添加一个整数,它将被添加,起始值是ID。

我不明白我做错了什么,从管理界面我可以毫无问题地添加记录。

我得到的错误是

  

jango.db.utils.IntegrityError:NOT NULL约束失败:   ah_cotizacion.Product,

但事情不在值中,如果我只是在开始时添加一个有效的整数,它会添加记录proprtl

编辑:我的模特

# Create your models here.
class Producto(models.Model):

    nombre = models.CharField(max_length=200, unique=True)
    id =  models.PositiveIntegerField(primary_key=True)
    umbral = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.nombre




class Cotizacion(models.Model):


    minimo = models.FloatField()
    maximo = models.FloatField()
    promedio = models.FloatField()
    cantidad = models.PositiveIntegerField()
    Producto = models.ForeignKey(Producto)

    def __str__(self):

        return self.Producto.nombre

我要做的工作是:

def registrarCotizacionProducto(producto):

    with open('resultados/temporal.json') as json_data:
        d = json.load(json_data)
        resultadoX = b.buscarObjeto(d, producto.id)


        cantidad = resultadoX['cantidad']
        maximo = round(resultadoX['maximo'], 2)
        minimo = round(resultadoX['minimo'], 2)
        promedio = round(resultadoX['promedio'], 2)

    cot = Cotizacion(minimo, maximo, promedio, cantidad, producto.id)
    cot.save()

3 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为ForeignKey字段默认情况下不允许空值,但您尝试初始化Cotizacion类的实例而不引用任何Producto实例。

答案 1 :(得分:0)

您尝试使用三个参数初始化Cotization,其中此模型的定义需要五个参数。

我们还在谈论Cotization还是Producto?

更新(原始帖子更新后有关其他数据): 请查看this link。请使用下划线字符或仅使用完整对象。 "点"符号与给出完整对象相同。

cot = Cotizacion(minimo, maximo, promedio, cantidad, producto_id)

cot = Cotizacion(minimo, maximo, promedio, cantidad, producto)

答案 2 :(得分:0)

感谢大家的反馈和时间+努力。

在经过大量尝试错误后,我找到了解决方案

似乎即使你有一个不属于你模型的自动生成的id,你也必须通过参数传递它,就像普通的SQL一样,它可以通过传递NULL值或Python等价物来完成{{1 }}

所以,答案是

None