2016-11-16 2 views
0

Я хочу сделать простую группу с помощью django ORM.Группа Django ORM

SELECT * FROM user AS u JOIN user_photo AS up WHERE u.`user_id` = up.`user_id` GROUP BY up.`user_id`; 

Структура user_photo: идентификатор | фото | user_id

Пользователь на сайте: ID | имя | статус | описание | платные | user_id

У меня есть другая таблица с фотографиями пользователей, которые пользователи загружают в базу данных. Я могу извлечь информацию от пользователя, но хочу только одну и последнюю фотографию, которую пользователь загрузил из таблицы фотографий пользователя.

Я хочу группе, на моем поле не используется какой-либо модели функции, как кол, макс, мин, средняя и т.д.

Любой человек может помочь?

+0

Я не могу использовать функцию модели графа, я не хочу ничего подсчитывать, просто группируюсь по полю id, чтобы пропустить дублированные строки из другой таблицы. – Storm

+0

вы просите, чтобы вы только хотели вытащить последнее изображение представлен для каждого пользователя? –

+0

Мне нужно вытащить пользователя из одной таблицы, другая таблица с загрузкой фотографий пользователей, я просто хочу, чтобы последняя фотография пользователя из этой таблицы фотографий отображалась в виде поиска, получила? – Storm

ответ

0

Технически вы выполняете GROUP BY с .group_by(), но это не совсем то, что вы ищете.

Вы можете достичь своей цели с помощью ORM, используя prefetch_related.

Объекты Prefetch позволяют выполнять поиск любого типа с помощью ORM.

В вашем случае:

User.objects.prefetch_related(
    Prefetch(
     'photos', 
     queryset=Photo.objects.last(), 
    ) 
) 

Где 'фотографии' это вы related_name или 'photo_set' по умолчанию. Кроме того, метод .last() может быть заменен на .order_by() по вашему выбору.

Обратите внимание, что он будет отличаться от вашего примера SQL тем фактом, что prefetch будет выполнять дополнительный запрос вместо JOIN.

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