Невозможно вызвать Ajax функцию щелчка в Django - PullRequest
0 голосов
/ 07 апреля 2020

Попытка обновить модель, в зависимости от того, какая ссылка для скачивания была нажата в Django.

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

Из профиля. 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>
                <br>
                <a class="btn" id="download" href="{{ y.highlight.url }}" data-id="{{ y.highlight_id }}" download>Download</a>
            </div>
          {% endif %}
        {% endfor %}
        </div>
      </div>
    {% endif %}
  {% endfor %}
<script type="text/javascript">
  $("#download").click(function() {
    console.log( $(this).attr("data-id") );
    var catid;
    catid = $(this).attr("data-id");
    $.ajax({
        type:"POST",
        url: "/downloaded",
        data: {
              highlight_id: catid
            },
        success: function( data )  {
          console.log(data)
        }
      })
   })
  </script>

Из views.py

def downloaded(request):
    if request.method == 'POST':
        highlight_id = request.GET('highlight_id')
        downloadedvideo = Highlight.objects.get(pk=highlight_id)
        downloadedvideo.used = True
        downloadedvideo.save()
        return
    else:
        return

urls.py

urlpatterns = [
    path('', UploadVideo.as_view(), name='upload'),
    path(r'^downloaded/$', views.downloaded, name='downloaded'),
]

Любая помощь приветствуется!

Обновленный профиль. html Это обновленный профиль, следуя инструкциям, приведенным здесь: JQuery: Выполнить публикацию до перехода по ссылке

     {% 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>
                <br>
                <a class="btn" class="download" href="{{ y.highlight.url }}" data-id="{{ y.highlight_id }}" download>Download</a>
            </div>
          {% endif %}
        {% endfor %}
        </div>
      </div>
    {% endif %}
  {% endfor %}
<script type="text/javascript">
  $(".download").click(function(ev) {
    var self = this;
    $post.('/downloaded', function() {
      window.location.href = self.href;
    });
    return false;
});

Из Models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Highlight(models.Model): #record of each HIGHLIGHT video, derived from a SOURCE video
    highlight_id = models.AutoField(primary_key = True)
    creator = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    game = models.ForeignKey(Game, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(default=timezone.now)
    sourcevideo = models.ForeignKey(Video, null=True, on_delete=models.SET_NULL)
    highlight = models.FileField(upload_to = 'highlights/')
    max_energy = models.IntegerField()
    average_energy = models.IntegerField()
    highlight_length = models.IntegerField()
    quality = models.IntegerField(null=True)
    used = models.BooleanField(default=False)

    def __str__(self):
        return self.title

1 Ответ

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

В вашем views.py файле вы используете request.GET вместо request.POST

Так как нет запросов GET, ваше представление возвращает None.

Это должно выглядеть так:

def downloaded(request):
    if request.method == 'POST':
        highlight_id = request.POST('highlight_id')
        downloadedvideo = Highlight.objects.get(pk=highlight_id)
        downloadedvideo.used = True
        downloadedvideo.save()
        return
    else:
        return
...