#python #django #sqlite
#python #django #sqlite
Вопрос:
У меня есть класс:
class Like(models.Model):
user = models.ForeignKey(User, related_name='likes', on_delete=models.CASCADE)
post = models.ForeignKey(Post, related_name='likes', on_delete=models.CASCADE)
ratingtype = models.IntegerField(default=0)
это позволяет мне отображать общее количество строк в таблице базы данных с помощью этого тега:
{{post.likes.count}}
Каков наилучший способ изменить этот класс, чтобы я мог различать подсчет по двум типам оценок (1 или 0)
Комментарии:
1. Я думаю, что лучше всего иметь логическое значение, и что по умолчанию оно равно false, когда оно становится положительным, выполняется подсчет
Ответ №1:
Не создавайте запросы в шаблоне. Шаблоны используются для логики визуализации, а не для бизнес-логики.
Вы можете аннотировать Post
объекты, которые вы извлекаете, с помощью:
from django.db.models import Count, Q
Post.objects.annotate(
likes0=Count('likes', filter=Q(ratingtype=0)),
likes1=Count('likes', filter=Q(ratingtype=1))
)
Product
s, возникающие из этого набора запросов, будут иметь два дополнительных атрибута: .likes0
и .likes1
, который содержит число likes
с ratingtype=0
и ratingtype=1
соответственно. Таким образом, вы можете затем отобразить это с помощью:
{{ post.likes0 }}
{{ post.likes1 }}