2014-07-20 3 views
0

Поэтому у меня есть две модели, содержащие первичный ключ «User»Объединение двух таблиц с пунктом

class Reviews(models.Model): 
    subject_user = models.ForeignKey(User,related_name='reviewed_user') 

class Friendship(models.Model): 
    head_user = models.ForeignKey(User,related_name='followed') 

Теперь я хочу, чтобы найти все отзывы пользователей, которые также в Friendsip.head_user ... Что-то вроде это

SELECT * FROM reviews JOIN friendship WHERE reviews.subject_user_id IN friendship.head_user_id 

OR 

SELECT * FROM reviews JOIN friendship ON reviews.subject_user_id = friendship.head_user_id 

Как это сделать в Django. SQL (может быть, не идеальный) - это просто объяснить, что я пытаюсь сделать.

+0

Django ORM немного отличается, то SQL. Как должны выглядеть выходные данные? –

+0

Хорошо, мне нужен список объектов Обзоры и все соответствующие объекты Пользователя (в каждом обзоре есть subject_user). – suneet

ответ

0

использование выберите связанные

Reviews.objects.all().select_related('friendship__ head_user_id') 

или читать на lookups that span relationship

или, может быть, это будет полезно: 'F expressions'

+0

В вашем ответе вы использовали '.all()' для отзывов и проигнорировали часть 'subject_user'. На самом деле у меня есть много других полей в модели Обзоров, таких как 'tail_user = models.ForeignKey (User)' и т. Д. И т. Д. Так должно быть, это так: 'Reviews.objects.all(). Select_related ('friendship__ head_user_id', ' reviews__subject_user_id ') ' – suneet

+1

Этот ответ очень вводит в заблуждение - или даже неправильно. 'select_related' никоим образом не добавляет столбцы из зарубежных моделей в базовые объекты. Все, что он делает, делает уже существующие отношения с внешним ключом более эффективными. –

+0

как я понял, он просто хотел иметь внешний ключ (присоединился), а не добавлять новые куломы, select_related делает это. –

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