带有validate_unique的django模型过滤器

时间:2013-10-07 08:26:28

标签: python django validation

有一个错误表示'语法无效' 但我是django和python的新手...... 这段代码中的错误是什么? 第一个if-block效果很好 第二个没有......

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    is_joined = models.BooleanField(default = False) #if True, joined, else wish_member
    is_master = models.BooleanField(default = False)
    def __str__(self):
        if(self.is_joined):
            return self.person.name + " is a member in Group " + self.group.name
        return self.person.name + " wishes to join in Group " + self.group.name
    def validate_unique(self, *args, **kwargs):
        #super(Person, self.person).validate_unique(*args, **kwargs)
        #tests if there is already the same person in the same group.
        if(self.__class__.objects.filter(person_id = self.person.id, group_id = self.group.id,).exists()):
        raise ValidationError(
            {
                NON_FIELD_ERRORS:
                ('The person already exists.',)
            }
        )
    elif(self.__class__objects.filter(is_master = True, group_id = self.group.id,).exists()):
        raise ValidationError(
            {
                NON_FIELD_ERRORS:
                ('The master already exists.')
            })

编辑:注意到点丢失了。在那里找到它的信用卡。错误发生在:

elif(self.__class__.objects.filter(is_master = True, group_id = self.group.id,).exists()):

2 个答案:

答案 0 :(得分:1)

您在elif语句中遗漏了__class____objects__之间的点。它应该是:

elif(self.__class__.objects.filter(is_master = True, group_id = self.group.id,).exists()):

但是,这会给你一个属性错误,你说你有语法错误,所以可能还有其他问题我没有发现。

答案 1 :(得分:1)

您可以使用unique_together制作一组独特的字段。在您的情况下,您指定

class Membership(models.Model):
....

    class Meta:
        unique_together = (
                               ("person", "group"),
                               ("is_master", "group"),
                          )

这将确保persongroup以及is_mastergroup在一起是唯一的。 Read more information here