检查另一个字段同时检查多对多关系

时间:2010-10-13 13:41:57

标签: django django-models django-orm

我的一个模型上有一个简单的所有权设计。它可以由多个人拥有,当前所有者可以添加其他人,但他们必须在被视为真正所有者之前确认邀请。

class MyOwnedThing(models.Model):
    owners = models.ManyToManyField(User, through='Ownership', related_name='othings')

    def is_owner(self, user):
        return user in self.owners

class Ownership(models.Model):
    user = models.ForeignKey(User)
    myownedthing = models.ForeignKey(MyOwnedThing)

    confirmed = models.BooleanField(default=False)

问题是MyOwnedThing.is_owner需要检查所有者是否已确认其邀请。有没有一种简单的方法可以做到这一点,还是我做了一个单独的尝试/除Ownership.objects.filter(user=u, myownedthing=mot, confirmed=True)周围?

1 个答案:

答案 0 :(得分:0)

我通常使用关联表来实现此类功能。以下内容尚未经过测试,但应该让您大致了解我的意思:

class Resource(models.Model):
    resource = models.TextField(max_length=255)

class ResourceUser(models.Model):
    owner = models.ForeignKey(User)
    resource = models.ForeignKey(Resource)

    def is_owner(self, user, res):
        return self.filter(self.owner=user).filter(self.resource=res)