Преобразование QuerySet of Dicts в список идентификаторов для использования в другом QS - PullRequest
0 голосов
/ 11 июля 2020

У меня есть список «Видео с наибольшим количеством просмотров», составленный в следующем формате:

class Video(models.Model):
    ....

class Viewcount(models.Model);
    video = models.ForeignKey(Video)
    date = models.DateField

Я пытаюсь создать код для отображения «Видео с наибольшим количеством просмотров за последние 30 дней». Это мой код на данный момент:

today = datetime.date.today()
thirty_days_ago = today - datetime.timedelta(days=30)
mostviewed = View.objects.filter(date__gte=thirty_days_ago).values('video').order_by('video').annotate(vidcount=Count('video')).order_by('-vidcount')

Какие результаты:

<QuerySet [{'video': 9130}, {'video': 1}, {'video': 9138}, {'video': 9170}, {'video': 3}, {'video': 9135}]>

Как я могу превратить это в простой список для использования в шаблоне? Например:

{% for video in new_list %}
{{video}} would output video #9130, then #1, then #9138, etc.
{% endfor %}

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

Спасибо!

1 Ответ

0 голосов
/ 11 июля 2020

Я смог разобраться в этом самостоятельно. Вот полный список кода, который я использовал для этого:

a = View.objects.filter(date__gte=thirty_days_ago).values('video').order_by('video').annotate(vidcount=Count('video')).order_by('-vidcount')
b=[]
for i in a:
    b.append(i['video'])
c = Video.objects.filter(id__in=b)
mostviewed = c.annotate(viewcount=Count('view')).order_by('-viewcount')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...