在Django用户模型中迁移时,Django UNIQUE约束因OneToOneField而失败

时间:2016-11-25 11:22:50

标签: python django sqlite models

在数据库中,我已经注册了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约束失败:persons_person.wall_id。

1 个答案:

答案 0 :(得分:0)

您应该更改与Blog模型的关系,因为一个Person可以写出超过1个博客,因此它是1-M关系。因此,在Blog模型中,您应该定义ForeignKeyPerson模型。

person = models.ForeignKey(
        'person.Person',
        related_name='walls'    
    )

wall字段将从Person模型中移除,但是从人物对象中,您将能够使用相关名称walls访问博客。

如果您必须将PersonBlog作为1-1关系,则必须从数据库中删除不遵循此约束的记录。