Django 2.0:外键约束

问题描述 投票:0回答:1

当我尝试创建模型的新实例时,我不断收到外键约束。我可以在管理员中做到这一点,但它在代码方面不起作用。我曾经采取这种Thing模型并将其移至其他外键并将这两个外键放入其中,但是我不知道这是否与该错误有关。您知道什么在造成此外键错误吗?

class ThingManager(models.Manager):
  def new(self,thing_a=None,thing_b=None):
    return self.model.objects.create(thing_a=thing_a, thing_b=thing_b)

class Thing(models.Model):
    thing_a= models.ForeignKey(BillingProfile, blank=False, related_name='thinga+', default=False, on_delete=models.CASCADE)
    thing_b= models.ForeignKey(BillingProfile, blank=False, related_name='thingb+',default=False, on_delete=models.CASCADE)
    thing_c = models.ForeignKey(BillingProfile, blank=True, related_name='thingc+',default=False, on_delete=models.CASCADE,null=True)
    thing_id = models.CharField(max_length=120, blank=True)

    def __str__(self):
        return self.thing_id

    objects = ThingManager()

BillingPorfile只是用户配置文件的扩展名

class BillingProfile(models.Model):
    user        = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    email       = models.EmailField()

创建错误的代码:

bp1 = BillingProfile.objects.filter(user__email='[email protected]')
bp2 = BillingProfile.objects.filter(user__email='[email protected]')
qs = Thing.objects.new(thing_a=bp1.first(),thing_b=bp2.first())

错误消息:

 Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "C:myapp\src\thing\models.py", line 38, in new
        return self.model.objects.create(thing_a=thing_a, thing_b=thing_b)
      File "C:myapp\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "C:myapp\lib\site-packages\django\db\models\query.py", line 417, in create
        obj.save(force_insert=True, using=self.db)
      File "C:myapp\lib\site-packages\django\db\models\base.py", line 729, in save
        force_update=force_update, update_fields=update_fields)
      File "C:myapp\lib\site-packages\django\db\models\base.py", line 759, in save_base
        updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
      File "C:myapp\lib\site-packages\django\db\transaction.py", line 212, in __exit__
        connection.commit()
      File "C:myapp\lib\site-packages\django\db\backends\base\base.py", line 261, in commit
        self._commit()
      File "C:myapp\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
        return self.connection.commit()
      File "C:myapp\lib\site-packages\django\db\utils.py", line 89, in __exit__
        raise dj_exc_value.with_traceback(traceback) from exc_value
      File "C:myapp\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
        return self.connection.commit()
    django.db.utils.IntegrityError: FOREIGN KEY constraint failed
django foreign-keys
1个回答
1
投票

[问题可能出在thing_c的默认值。外键是对其他表列的引用,在这种情况下(当既未在模型中明确指定主键,又未指定to_field字段的ForeignKey属性的情况下)到idBillingProfile字段,因此是某种形式整数,不是布尔值。

thing_c外键的默认值更改为None。实际上,应该删除thing_athing_b默认值,因为您没有在这些字段上指定null=True

© www.soinside.com 2019 - 2024. All rights reserved.