2009-05-06 4 views
1

J'ai deux modèles similaires avec un gestionnaire commun, qui retourne un jeu de requête pour l'utilisateur actuellement connecté. Je souhaite que User_Places.current_user.get (place = XXX) renvoie l'objet User_Place() existant ou vide User_Places(), lorsque l'exception DoesNotExist est déclenchée. Comment est-ce possible? CurrentUserManager ne sait rien sur les modèles User_Places et User_Projects, si je ne me trompe pas?Régler queryset.get pour travailler sans l'exception DoesNotExist dans le gestionnaire du modèle

Je ne veux pas seulement toujours écrire:

try: 
    places = User_Places.current_user.get(place=XXX) 
except: 
    places = User_Places() 

Code de mes modèles:

class User_Places(models.Model): 
    place = models.ForeignKey('Place') 
    user = models.ForeignKey(User) 
    current_user = CurrentUserManager() 

class User_Projects(models.Model): 
    project = models.ForeignKey('Project') 
    user = models.ForeignKey(User) 
    current_user = CurrentUserManager() 

class CurrentUserManager(models.Manager): 
    def get_query_set(self): 
     user = threadlocals.get_current_user() 
     qs = super(CurrentUserManager, self).get_query_set() 
     if user: 
      qs = qs.filter(user=user) 
     return qs 

    def get(self, *args, **kwargs): 
     try: 
      object = super(CurrentUserManager, self).get(*args, **kwargs) 
     except: 
      object = ???????????????????????? 
     return object 
+1

Qu'est-ce que UserProjects a à voir avec quoi que ce soit? Pourquoi UserProjects fait-il référence à UserManager? –

+0

Réponse pour la deuxième question: CurrentUserManager permet d'obtenir des objets UserProjects et UserPlaces spécialement pour l'utilisateur actuellement connecté. Et je n'ai pas compris la première question, désolé. – ramusus

Répondre

2

solution here trouvé. Il y a self.model() à l'intérieur de la classe Manager:

class CurrentUserManager(models.Manager): 
    .... 
    def get(self, *args, **kwargs): 
     try: 
      object = super(CurrentUserManager, self).get(*args, **kwargs) 
     except: 
      object = self.model(**kwargs) 
     return object 
Questions connexes