2013-06-01 1 views
0

Я играл в учебнике Django и пытаюсь получить поле экземпляра модели, связанного (через внешний ключ) с другим экземпляром модели. Вот что я имею в виду:Django: запрос полей экземпляров модели «один к одному»

Модель файла:

from django.db import models 

class Usercar(models.Model): 
    make = models.CharField(max_length=200) 
    model = models.CharField(max_length=200) 
    year = models.DateTimeField('year of car') 
    def __unicode__(self): 
     return self.make 

class Suggestcar(models.Model): 
    usercar = models.ForeignKey(Usercar) 
    make = models.CharField(max_length=200) 
    model = models.CharField(max_length=200) 
    year = models.DateTimeField('year of car') 
    def __unicode__(self): 
     return self.make 

В оболочке, это то, что я получаю, когда я пытаюсь получить сделать из suggestcar, связанного с usercar:

>>from django.utils import timezone 
>>mycar1 = Usercar(make="Ford",model="Escort",year=timezone.now()) 
>>mycar1.save() 
>>mycar1.suggestcar_set.create(make="Ford", model="Taurus", year=timezone.now()) 
>>mycar1.suggestcar_set.filter(id=1).make 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/django/core/management/commands/shell.pyc in <module>() 
----> 1 mycar1.suggestcar_set.filter(id=1).make 

AttributeError: 'QuerySet' object has no attribute 'make' 

Как я могу получить make из этого mycar1.suggestcar_set.filter (id = 1)? Благодаря!

ответ

2

filter возвращает запрос, если вы хотите получить доступ к объектам в нем, вам необходимо выполнить итерацию по запросу или получить первый результат от него.

mycar1.suggestcar_set.filter(id=1)[0].make 

Если вы хотите вернуть только 1 объект, вы действительно должны использовать get

mycar1.suggestcar_set.get(id=1).make 
+0

Это еще возвращает ошибку DoesNotExist для меня ... Я дам вам знать, если я Мессинг где-то, и это работает. Благодаря! – Rishi

+0

Что вызывает эту ошибку? 'DoesNotExist' и' AttributeError' сильно отличаются друг от друга. Если вы получаете 'DoNotExist', то для предоставленного запроса результатов нет. Вы можете попробовать 'mycar1.suggestcar_set.values ​​()', чтобы увидеть все объекты 'Suggestcar', связанные с' mycar1' – Ngenator

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