FOREIGN KEY约束失败删除django

时间:2017-11-12 17:21:14

标签: python django rest django-templates

抱歉我的英文。我花了2天但不明白为什么我有错误:

FOREIGN KEY constraint failed

我使用python 2.7一切正常,然后我更新到python 3.5.2,现在当我尝试删除时,我有这个错误。我有以下模型:

class Auction(models.Model):
    sealers = models.ForeignKey(User, related_name="sealers", on_delete=models.CASCADE)
    buyer = models.ManyToManyField(User, related_name='buyer')
    product_in_auction = models.ForeignKey(Product, related_name='product_in_auction', null=True, blank=True, on_delete=models.CASCADE)
    name_auction = models.CharField(max_length=64, blank=False, null=False)
    description = models.TextField(blank=True, null=True, default=None)
    conf_propose = models.OneToOneField('Propose', null=True, blank=True, related_name='confirm_proposition', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)

    class Meta:
        verbose_name = 'Auction'
        verbose_name_plural = 'Auctions'

    def __str__(self):
        return "%s" % (self.name_auction)


class Propose(models.Model):
    buyer = models.ForeignKey(User, related_name="propositions_of_auction", on_delete=models.CASCADE, null=True, blank=True)
    auction = models.ForeignKey(Auction, related_name="propositions_of_auction", on_delete=models.CASCADE)
    bit = models.DecimalField(max_digits=10, decimal_places=2, default=0, blank=True)
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)

    class Meta:
        verbose_name = 'Proposition of the auction'
        verbose_name_plural = 'Propositions of the auction'

    def __str__(self):
        return "%s" % (self.bit)

当我尝试删除一些auction我有错误

FOREIGN KEY constraint failed

2 个答案:

答案 0 :(得分:0)

我认为问题不在于python版本。就像错误说的那样,你有外键约束。因此,在您的Propose模型中,您有一个名为auction的字段,它是模型Auction的ForeignKey,因此如果您想删除某些拍卖实例,它也会影响表中的数据。

答案 1 :(得分:0)

每次我想使用管理来更改某些内容时,都会遇到此错误。我很幸运没有大型数据库。因此,我只是删除了所有迁移(除了__init__.py)和数据库,然后再次使用manage.py makemigrationsmanage.py migrate进行了迁移。 这种简单的方法对我有用!