2010-10-13 21 views
0

J'ai un modèle de propriété simple sur l'un de mes modèles. Il peut appartenir à plusieurs personnes et les propriétaires actuels peuvent ajouter d'autres personnes, mais ils doivent confirmer l'invitation avant de les traiter comme un véritable propriétaire.Vérification d'un autre champ en même temps que la vérification d'une relation plusieurs-à-plusieurs

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) 

Le problème est MyOwnedThing.is_owner doit vérifier que le propriétaire avait confirmé leur invitation. Y at-il un moyen simple de faire cela ou suis-je laissé faire un essai séparé/sauf autour de Ownership.objects.filter(user=u, myownedthing=mot, confirmed=True)?

Répondre

0

J'utilise généralement des tables d'association pour ce type de fonctionnalité. Ce qui suit n'a pas été testée mais devrait vous donner une idée générale de ce que je veux dire:

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)