在 Django 用户模型中迁移时,Django UNIQUE 约束因 OneToOneField 而失败
Django UNIQUE constraint failed with OneToOneField while migrate in Django User Model
在数据库中我已经注册了 4 个人,但他们是在模型还没有关系属性时注册的。当我添加它们时,我得到了这个模型:
class Person(User):
type = models.BooleanField()
avatar = models.ImageField(blank=True)
second_name = models.CharField(max_length=30, blank=True, default='')
birthday = models.DateField(blank=True, default=None)
country = models.CharField(max_length=30, blank=True, default='')
city = models.CharField(max_length=30, blank=True, default='')
school = models.CharField(max_length=60, blank=True, default='')
university = models.CharField(max_length=60, blank=True, default='')
work_place = models.CharField(max_length=60, blank=True, default='')
profession = models.CharField(max_length=60, blank=True, default='')
phone = models.CharField(max_length=30, blank=True, default='')
about = models.TextField(blank=True, default='')
latitude = models.FloatField(blank=True, default=-1)
longitude = models.FloatField(blank=True, default=-1)
friends = models.ForeignKey(
'self',
related_name='+',
)
black_list = models.ForeignKey(
'self',
related_name='+',
)
dialogues = models.ManyToManyField(
'dialogues.Dialogue',
)
news = models.OneToOneField(
'news.NewsList',
)
wall = models.OneToOneField(
'blogs.Blog',
)
但是现在当这个模型迁移时我有错误:django.db.utils.IntegrityError: UNIQUE constraint failed: persons_person.wall_id.
你应该改变与 Blog
模型的关系,因为一个 Person
可以写超过 1 个博客,因此它是 1-M 关系。所以在 Blog 模型中你应该定义一个 ForeignKey
到 Person
模型。
person = models.ForeignKey(
'person.Person',
related_name='walls'
)
并且 wall
字段将从 Person
模型中删除,但您将能够从人物对象访问使用相关名称 walls
的博客。
如果您需要将 Person
到 Blog
作为 1-1 关系,那么您将不得不从数据库中删除不遵循此约束的记录。
在数据库中我已经注册了 4 个人,但他们是在模型还没有关系属性时注册的。当我添加它们时,我得到了这个模型:
class Person(User):
type = models.BooleanField()
avatar = models.ImageField(blank=True)
second_name = models.CharField(max_length=30, blank=True, default='')
birthday = models.DateField(blank=True, default=None)
country = models.CharField(max_length=30, blank=True, default='')
city = models.CharField(max_length=30, blank=True, default='')
school = models.CharField(max_length=60, blank=True, default='')
university = models.CharField(max_length=60, blank=True, default='')
work_place = models.CharField(max_length=60, blank=True, default='')
profession = models.CharField(max_length=60, blank=True, default='')
phone = models.CharField(max_length=30, blank=True, default='')
about = models.TextField(blank=True, default='')
latitude = models.FloatField(blank=True, default=-1)
longitude = models.FloatField(blank=True, default=-1)
friends = models.ForeignKey(
'self',
related_name='+',
)
black_list = models.ForeignKey(
'self',
related_name='+',
)
dialogues = models.ManyToManyField(
'dialogues.Dialogue',
)
news = models.OneToOneField(
'news.NewsList',
)
wall = models.OneToOneField(
'blogs.Blog',
)
但是现在当这个模型迁移时我有错误:django.db.utils.IntegrityError: UNIQUE constraint failed: persons_person.wall_id.
你应该改变与 Blog
模型的关系,因为一个 Person
可以写超过 1 个博客,因此它是 1-M 关系。所以在 Blog 模型中你应该定义一个 ForeignKey
到 Person
模型。
person = models.ForeignKey(
'person.Person',
related_name='walls'
)
并且 wall
字段将从 Person
模型中删除,但您将能够从人物对象访问使用相关名称 walls
的博客。
如果您需要将 Person
到 Blog
作为 1-1 关系,那么您将不得不从数据库中删除不遵循此约束的记录。