Django Невозможно обновить модель на основе клика по ссылке. - PullRequest
0 голосов
/ 07 апреля 2020

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

В настоящее время я использую пользовательский тег, который находит соответствующую запись и изменяет логическое значение «used» на True Однако теперь я понимаю, что это происходит при отображении ссылки, а не при нажатии.

Ясно, что это не тот способ, которым я должен это делать, но я не нашел альтернативы в моем поиске. Любая помощь будет принята с благодарностью!

профиль. html

{% for x in source %}
    {% if forloop.counter <= 4 %}
      <div class="content-section">
        <div class="media-body">
        <h2 class="account-heading">{{ x.video_id }}</h2>
        {% for y in records %}
          {% if x.video_id == y.sourcevideo.video_id %}
            <div class="media-body">
              <video width="320" height="240" controls>
                <source src="{{ y.highlight.url }}" type="video/mp4">
                  Your browser does not support the video tag
                </video>
                <h1>{{ y.highlight_id }}</h1>
                <br>
                <a class="btn" href="{% downloaded y.highlight.url y.highlight_id %}" download>Download</a>
            </div>
          {% endif %}
        {% endfor %}
        </div>
      </div>
    {% endif %}
  {% endfor %}

templatetags / analytics.py

from django import template
from highlights.models import Highlight


register = template.Library()


@register.simple_tag
def downloaded(url, pk):
    e = Highlight.objects.get(highlight_id=pk)
    e.used = True
    e.save()
    return url

Из views.py

class ProfileView(ListView):
    model = Highlight
    template_name = 'users/profile.html'
    context_object_name = 'records'
    ordering = ['-date_created']

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

    def get_queryset(self):
        return Highlight.objects.filter(creator=self.request.user)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['source'] = Video.objects.filter(creator=self.request.user).order_by('-pk')
        return context

1 Ответ

1 голос
/ 07 апреля 2020

Это именно то, для чего Ajax. Это как «когда пользователь нажимает кнопку, запускаю мою бэкэнд-функцию». Вместо того, чтобы создавать целое представление только для обработки, вы просто определяете функцию с JSONResponse в качестве возврата, и вы готовы к go. Когда вы это узнаете, это улучшит ваши впечатления от django / web dev. Вот ссылка

...