#python #django #sqlite
#python #django #sqlite
Вопрос:
Две таблицы: post и рейтинг.
рейтинг содержит столбец — post (FK), который является основным идентификатором таблицы post. Я пытаюсь отфильтровать рейтинг таблицы по столбцам user и ratingtype, чтобы получить значение post (FK), по которому я мог бы использовать для фильтрации таблицы post.
Post.objects.filter(pk__in=Rating.objects.get(post=post).filter(Rating.objects.filter(user = self.request.user, ratingtype='like')))
Комментарии:
1. Итак, вы хотите, чтобы все
Post
объекты с лайком от данного пользователя?2. Да, именно так.
Ответ №1:
Вы можете просматривать «сквозные» отношения с помощью двух последовательных символов подчеркивания ( __
), поэтому:
Post.objects.filter(
rating__user=self.request.user,
rating__ratingtype='like'
).distinct()
Предложение .distinct()
[Django-doc] предотвращает повторное повторение одного и того же Post
несколько раз, если пользователь присвоил несколько оценок.
Если вы указали related_query_name=…
[Django-doc] или related_name=…
[Django-doc] в ForeignKey
, то это имя отношения в обратном порядке, поэтому вместо rating__
него related_query_name__
(со related_query_name
значением, которое вы использовали для related_query_name=…
параметра).
Комментарии:
1. не уверен, что я объяснил достаточно справедливо в своем посте. Мне нужно извлечь значение столбца «post» в таблице «рейтинг» по столбцам «user» и «ratingtype» и использовать значение для фильтрации таблицы Post.
2. @Augis: но позже вы собираетесь извлекать сами
Post
объекты? Тогда более эффективно и элегантно работать сJOIN
s, и это то, что делают двойные подчеркивания.3. @Augis: таким образом, вам не нужно извлекать значение столбца. Django может следовать отношениям в обратном порядке.
4. большое спасибо, потребовалось некоторое время, чтобы понять, что вы говорили, но вы правы, большое спасибо!