Django - UNIQUE约束失败

时间:2017-03-14 20:32:23

标签: python django debugging django-models frameworks

即使我看了其他有这个问题的人,我也无法解决我的问题。

如何使用外键创建id?我该如何使用id?

这是我的代码:

class Receipt(models.Model):
    amount = models.DecimalField(max_digits=5, decimal_places=2, primary_key=True)
    vat = models.DecimalField(max_digits=5, decimal_places=2)
    total_amount = models.IntegerField(default=0)


class ReceiptItem(models.Model):
    receipt_id = models.ForeignKey('Receipt', on_delete=models.CASCADE)
    product_id = models.ForeignKey('Product', on_delete=models.CASCADE)
    amount = models.DecimalField(max_digits=5, decimal_places=2)
    vat = models.DecimalField(max_digits=5, decimal_places=2)
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2)
    sub_total = models.IntegerField(default=0)
    name = models.CharField(max_length=200)

class Product(models.Model):
    name = models.CharField(max_length=5)
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2)
    amount = models.IntegerField(default=0, primary_key=True)

这是我得到的错误:

django.db.utils.IntegrityError: UNIQUE constraint failed: migros_product.amount

1 个答案:

答案 0 :(得分:2)

class Product(models.Model):
    name = models.CharField(max_length=5)
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2)
    amount = models.IntegerField(default=0, primary_key=True)

金额设置为primary key,这意味着数据库每个金额值只允许1条记录

但是,您还设置了default值为0,因此只要未提供金额值,您的数据库只能创建金额为0的1条记录。

你必须决定你想要什么。如果金额唯一性很重要,那么删除default = 0并将null = True,blank = True,例如。