0

「無効な構文」というエラーがありますが、私は django と python の初心者です... このコードのエラーは何ですか? 最初の if ブロックはうまく機能しますが、2 番目のブロックは機能しません...

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

elif ステートメントの__class__との間にドットがありません。__objects__そのはず:

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

ただし、それでは属性エラーが発生し、構文エラーが発生したと言うので、私が見つけていない別の問題がある可能性があります。

于 2013-10-07T08:33:56.107 に答える
1

を使用unique_togetherして、一連のフィールドをまとめて一意にすることができます。あなたの場合、指定します

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

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

これによりperson、 andgroupis_masterandgroupが一緒に一意になります。詳細については、こちらをご覧ください

于 2013-10-07T08:48:14.273 に答える