2009-05-06 41 views
1

我有兩個具有一個公共Manager的相似模型,它返回當前登錄用戶的queryset。當DoesNotExist異常引發時,我希望User_Places.current_user.get(place = XXX)返回現有的User_Place()對象或空的User_Places()。這怎麼可能?如果我是正確的,CurrentUserManager不知道關於User_Places和User_Projects模型的任何信息?調整queryset.get以便在模型管理器中無DoesNotExist異常工作

我只是不想總是寫:

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

代碼我的模型:

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

UserProjects對什麼有什麼作用?爲什麼UserProjects根本引用UserManager? – 2009-05-06 17:15:57

回答

2

找到解決方案here。 Manager類中有self.model():

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