2016-06-02 2 views
0

вот моя модель учетной записи, которая связана с пользователемполучение связанных с объектом в одной строке .get() запроса (OneToOneField)

class Accounts(models.Model): 
    user = models.OneToOneField(User , unique=True) 
    name = models.CharField(max_length=50 , default='') 
    lastname = models.CharField(max_length=50, default='') 
    phone = models.CharField(max_length=11, default='') 
    mobile = models.CharField(max_length=11, default='') 

я хочу этот запрос (игнорировать синтаксис, ошибки именования)

select accounts.* , auth_user.username , auth_user.email 
from accounts 
join auth_user on auth_user.id = accounts.user_id 
where accounts.user_id = 1 

поэтому я могу сделать;

account = Accounts.objects.filter(user_id=user_id).select_related() 

, но так как есть только одна учетная запись с этим идентификатором, я хочу пользователя .get() и показать объект без цикла

account = Accounts.objects.get(user_id=user_id).select_related() 

, но я получаю

'Accounts' object has no attribute 'select_related' 

так как я делаю это соединение при выборе одной строки? в основном я хочу, чтобы избежать использования цикла на объекте

ответ

0

Вы можете использовать first вместо получить

Возвращает первый объект, совпавшего с QuerySet, или None, если нет соответствующего объекта. Если QuerySet не имеет определенного порядка, то запрос автоматически упорядочивается с помощью первичного ключа.

account = Accounts.objects.filter(user_id=user_id).select_related().first() 
+0

спасибо, что буду делать, просто сбился любопытство ... нет вступать в .get()? – hretic

+0

@hretic - потому что 'select_related' должен использоваться в наборе запросов (поскольку это операция базы данных), где as get возвращает объект – Sayse

+3

Не имеет значения, используете ли вы' get() 'или' first() '-' Accounts.objects.filter (user_id = user_id) .select_related(). Get() 'будет работать. Главное, что вы сначала вызываете 'select_related()'. – Alasdair