0

有一个错误提示“无效语法”,但我是 django 和 python 的新手……这段代码有什么错误?第一个 if 块运行良好 第二个不...

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()):
4

2 回答 2

1

您可以使用unique_together使一组字段组合在一起,使其独一无二。在您的情况下,您指定

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

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

这将确保personandgroupis_masterandgroup一起是独一无二的。在此处阅读更多信息

于 2013-10-07T08:48:14.273 回答
1

您在 elif 语句之间__class__和之间缺少一个点。__objects__它应该是:

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

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

于 2013-10-07T08:33:56.107 回答