Django AJAX: доступ к данным из нескольких форм Dynami c - PullRequest
0 голосов
/ 25 мая 2020

Каждый ввод формы связан с уникальным data-comment-pk. Я пытаюсь получить доступ к значению data-comment-pk введенного ввода. В настоящее время alert(comment_pk) функции успеха AJAX получает только comment_pk первой формы. Как я могу получить доступ к comment_pk формы, которая была отправлена ​​вместо получения comment_pk первой формы?
html template

{% for comment in object_list %}
<h3>{{comment.comment}} by {{comment.username}}</h3>
<form class="score-form">
    <input type="submit" value="Up" name="up" class="Up" data-comment-pk="{{comment.pk}}" />
    <input type="submit" value="Down" name="down" />
</form>
{% endfor %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script>
    $(".score-form").submit(function (e) {
        e.preventDefault();
        var comment_pk = $(".Up").attr("data-comment-pk");
        var url = comment_pk + "/vote";
        console.log(url)
        $.ajax({
            type: 'GET',
            url: url,
            data: { "up": 'UP' },
            success: function (response) {
                if (response["valid"]) {
                    alert(comment_pk);
                }
            },
            error: function (response) {
                console.log(response)
            }
        })
    })
</script>

models.py

class CommentModel(VoteModel, models.Model):
    comment = models.TextField()
    username = models.ForeignKey(User, on_delete=models.CASCADE)

views.py

class CommentView(ListView):
  model = CommentModel
def comment_vote(request, comment_id):
  if request.is_ajax and request.method == "GET":
    # do some stuff
    return JsonResponse({"valid": True}, status=200)

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Вот решение этой проблемы:

var comment_pk = $(".Up", this ).attr("data-comment-pk");

Использование this вернет текущий HTML элемент.

0 голосов
/ 25 мая 2020

попробуйте: добавьте "this" перед .Up в comment_pk. дайте мне знать, если это сработает. this- получит актуальную форму, которая была отправлена, и получит класс .Up

<script>
    $(".score-form").submit(function (e) {
        e.preventDefault();
        var comment_pk = $("this .Up").attr("data-comment-pk");
        var url = comment_pk + "/vote";
        console.log(url)
        $.ajax({
            type: 'GET',
            url: url,
            data: { "up": 'UP' },
            success: function (response) {
                if (response["valid"]) {
                    alert(comment_pk);
                }
            },
            error: function (response) {
                console.log(response)
            }
        })
    })
 </script>
...