Извлечение данных sql класса Django

#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 }}