2009-05-06 3 views
1

У меня есть две аналогичные модели с одним общим диспетчером, который возвращает набор запросов для текущего зарегистрированного пользователя. Я хочу, чтобы User_Places.current_user.get (place = XXX) возвращает существующий объект User_Place() или пустой User_Places(), когда возникло исключение ExcNotExist. Как это возможно? CurrentUserManager ничего не знает о моделях User_Places и User_Projects, если я прав?Tune queryset.get для работы без исключения DoNotExist в диспетчере модели

Я просто не хочу писать всегда:

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 ссылается на UserManager вообще? –

+0

Ответ на второй вопрос: CurrentUserManager позволяет создавать объекты UserProjects и UserPlaces специально для текущего зарегистрированного пользователя. И я не понял первый вопрос, извините. – ramusus

ответ

2

Найдено решение here. В классе Менеджера есть 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 

 Смежные вопросы

  • Нет связанных вопросов^_^