2013-05-02 2 views
4

У меня есть приложение Джанго со следующей моделью:Сделать обратный OneToOneField не возвращать None в Джанго

class A(models.Model): 
    ... 

И я добавил новую модель, которая имеет отношение OneToOne с А, например, так:

class B(models.Model): 
    a = models.OneToOneField(A) 

Как вы можете видеть, не каждый экземпляр должен иметь отношения с В. Однако, когда я пытаюсь запросить для существования соответствующей модели B, как:

instanceOfA.b 

я получаю:

DoesNotExist: B matching query does not exist. 

Есть ли способ, что я могу сделать это возвращение запроса None без добавления свойства в моей модели A. Я знаю this almost identical question, но, к сожалению, он не получил не принято отвечать, и существующие предполагают модифицирование А.

настоящее время я использую:

if hasattr(instanceOfA, b): 
     ... 

Но он не чувствует себя очень чистым.

+0

возможно дубликат [Джанго: Возвращение «Нет» из OneToOneField если он связан объект не существует?] (http://stackoverflow.com/questions/3955093/django-return-none-from-onetoonefield-if-related-object-doesnt-exist) –

ответ

4

Вы можете установить метод на A, например.

class A(object): 
    # default stuff 

    def get_b(self): 
     return getattr(self, 'b', None) 

Или более явно

class A(object): 
    def get_b(self): 
     try: 
      return self.b 
     except Foobar.DoesNotExist: 
      return None 

Это охватывается особенность билета Джанго here

+0

О, не знал об этом запросе функции. Таким образом, кажется, что нет «чистого» способа сделать это прямо сейчас. Спасибо за ссылку. BTW, я пробовал что-то похожее на ваш первый фрагмент и получил то же исключение. На данный момент тестирование сначала с помощью hasattr, похоже, делает трюк, поскольку, похоже, это исключение. – kirbuchi

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