Django MPTT重复键值违反了唯一约束

时间:2016-02-02 13:59:18

标签: python django django-mptt

我练习django-mptt并面对问题

这是我的models.py

class Genre(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)

我创建了一些数据:

  • 美国
    • NY
      • BuildingA
        • 3F
        • 4F
      • BuildingB

现在,我需要在4F

下创建BuildingB
floor3 = Genre.objects.create(name="3F", parent= buildingB)

但面临问题:

IntegrityError: duplicate key value violates unique constraint "myapp_genre_name_key"
DETAIL:  Key (name)=(3F) already exists.  

我该如何解决?

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望您的名字在整个建筑中都是独一无二的。 为此,请从unique=True字段声明中删除name并添加元选项:

class Genre(MPTTModel):
    name = models.CharField(max_length=50)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)

    class Meta:
        unique_together = (('name', 'parent', ), )