массив не доступ в шаблоне - PullRequest
0 голосов
/ 28 июня 2019

Я хочу знать количество просмотров в каждом отдельном Плейлисте, где я могу сохранить номер просмотра для каждого в массиве и позже отобразить его в шаблоне, но покажу мне массив в следующем шаблоне:

[1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Здесь массив повторяется со списками воспроизведения, и я не могу перемещаться между элементами массива

Проблема 2: Я не могу определить количество просмотров на человека


def playlist_view(request,id):
    category = get_object_or_404(Category,pk=id)
    playlists = Playlist.objects.filter(category=category)

    views=list()
    for playlist in playlists:
        views.append(PlaylistView.objects.filter(playlist=playlist).count())
    print(views)

    return render(request, 'playlist.html',{'category': category,'playlists': playlists,'views':views})
                    {% for playlist in playlists %}
                    {{ views }} :: {{ playlist.name }}

                        {% endfor %}
def track_view(request,id_category,id_playlist):
    category = get_object_or_404(Category, pk=id_category)
    playlist= get_object_or_404(Playlist,pk=id_playlist)

    if not PlaylistView.objects.filter(playlist=playlist, session=request.session.session_key):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        view = PlaylistView(playlist=playlist, ip=ip, created_dt=datetime.now(), session=request.session.session_key)
        view.save()

здесь правый доступ в элементе Array, но нет доступа в плейлистах с одновременным доступом

      {% for view in views %}
                    {{ view }}
      {% endfor %}

      {% for playlist in playlists %}
              {{ views }} :: {{ playlist.name }}
      {% endfor %}

как получить доступ к двум массивам в одном цикле

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

спасибо за ответ, но в каждой категории много плейлистов, а в каждом плейлисте много PlaylistView.

Я успешно сохранил PlaylistView для каждого плейлиста:

def track_view(request,id_category,id_playlist):
    category = get_object_or_404(Category, pk=id_category)
    playlist= get_object_or_404(Playlist,pk=id_playlist)

    if not PlaylistView.objects.filter(playlist=playlist, session=request.session.session_key):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        view = PlaylistView(playlist=playlist, ip=ip, created_dt=datetime.now(), session=request.session.session_key)
        view.save()

Как узнать PlaylistView длякаждый плейлист здесь (на другой странице):

def playlist_view(request,id):
    category=get_object_or_404(Category,pk=id)
    playlists=Playlist.objects.filter(category=category)

    for playlist in playlists:
        PlaylistView.objects.filter(playlist=playlist).annotate(view_count=Count('playlistviews'))

И спасибо за agian!

0 голосов
/ 29 июня 2019

Как я вижу, вам нужны представления для каждого списка воспроизведения с ним, в этом случае вы можете использовать функцию setattr () для установки количества просмотров для объекта списка воспроизведения.Но лучшим подходом для этого является создание запроса, подобного этому

from django.db.models.aggregates import Count

Playlist.objects.filter(category=category).annotate(view_count= Count('related_name'))

Примечание: связанное имя должно быть из поля внешнего ключа PlaylistView с Playlist.Чем вы можете получить доступ следующим образом -

for playlist in playlists:
    {{ playlist.view_count }} :: {{ playlist.name }}

Для просмотра списка воспроизведения для каждого списка воспроизведения вы можете написать запрос следующим образом:

playlist = Playlist.objects.filter(category=category).prefetch_related(Prefetch('related_name', PlaylistView.objects.all(), 'my_list'))

, а затем вы можете получить доступ к этому набору запросов, например:

for playlist in playlists:
        {{ playlist.view_count }} :: {{ playlist.name }}
        for view in playlist.my_list:
            {{view}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...