Я пытаюсь обновить запись модели файла, когда он загружен с сервера.
В настоящее время я использую пользовательский тег, который находит соответствующую запись и изменяет логическое значение «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