Django ManyToMany字段给出了IntegrityError

时间:2018-11-05 16:52:47

标签: python django django-models

我正在使用Django 2.1.2

我有2个模型ItemsQuotation

class Item(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
            return self.name

class Quotation(models.Model):
    company = models.ForeignKey('Company', on_delete=models.CASCADE)
    unit_rate = models.CharField(max_length=200)
    item = models.ManyToManyField(Item)

    def __str__(self):
            return self.company.company_name

现在,当我添加Item时,它可以正常工作。

但是当我尝试在管理面板中添加引号时,它会给我null value in column "item_id" violates not-null constraint

我是Django的新手。如果有人可以指出我所缺少的东西,那就太好了。

2 个答案:

答案 0 :(得分:1)

这是我最近在进行客户项目时发生的事情。猜猜是什么,客户端开发人员在Django中修改模型后忘记进行迁移。

通常由于数据库而发生此错误。您可以检查DB中的表详细信息,以确保将要传递空值的字段实际上是否可以为空。

例如在Postgres中-\d table_name;

我如何解决?

  1. python manage.py makemigrations
  2. python manage.py migrate

答案 1 :(得分:0)

似乎您已将Quotation.itemForeignKeyOneToOneField更改为ManyToManyField字段。

进行此更改后,必须先运行manage.py makemigrations,然后运行manage.py migrate来创建,然后运行必要的数据库迁移。请注意,除非您进行迁移以将数据复制到“多对多”字段中,否则Quotation.item_id列中的所有现有数据都将被删除。