在Django中添加ajax按钮以更新用户的选择

时间:2019-06-01 23:26:00

标签: python django

我遵循了Mozilla所描述的here教程,并进行了一些修改以使其成为电影库。

我想为用户打开电影时将其添加为能够将其标记为“已看过”的选项。我想使用ajax做到这一点,以便用户单击的按钮也可以更改,而无需刷新页面。

这是用于存储用户选择的模型

class Seenit(models.Model):
    username = models.CharField(max_length=150)
    movieid = models.ForeignKey('Movie', on_delete=models.CASCADE)
    haveyouseenit = models.BooleanField(default=False, null=True, blank=True)

    def __str__(self):
        return f"{self.username}|{self.movieid.id}"

这来自urls.py

re_path(r'^add_to_seen/(?P<pk>.*)', views.Addseen.as_view(), name='add_to_seen')

这来自views.py

class Addseen(generic.DetailView):
    model = Seenit

    def get(self, request, *args, **kwargs):
        if request.is_ajax():
            check = get_object_or_404(Seenit, movieid=id, username=request.user.get_username())
            if not check.haveyouseenit:
                check.haveyouseenit == True
                check.save()
                return HttpResponse("1")
            else:
                check.haveyouseenit == False
                check.save()
                return HttpResponse("0")

这是来自显示按钮的movie_details.html以及我对ajax按钮的尝试。

    <div id="seen">
        {%  if user.is_authenticated  %}
            <button class="add_button" id="seen">Have seen</button>
            <b style="color: #3b97f4" id="message"></b>
            {%  if seen %}
                <script>
                    $("#seen").css({"background-color": "#f4b6e0", "color": "white"});
                </script>
            {% endif %}
        {% endif %}
                    <script>
                    $(document).ready(function () {
                        $("#seen").click(function () {
                            $.get("/add_to_seen/{{ movie.id }}", function (msg) {
                                if (msg === "1") {
                                    $("#seen").css({"background-color": "#f4f15f", "color": "white"});
                                    $("#message").html("Added to Seen!").fadeIn("fast").fadeOut("slow");
                                }
                                if (msg === "0") {
                                    $("#seen").css({"background-color": "white", "color": "black"});
                                    $("#message").html("Deleted from Seen!").fadeIn("fast").fadeOut("slow");
                                }
                            });
                        });
                    });
                </script>
    </div>

当我看电影时,该按钮出现,但是它什么也没做。我是django和javascript / ajax的新手,所以您可能提供的任何信息都请解释一下。

1 个答案:

答案 0 :(得分:0)

<button class="add_button" id="seen" onclick="Seen()">Have seen</button>

在javascript中:

function Seen(){
var patch = '{% url "add_to_seen" %}'
info = {'csrfmiddlewaretoken':"{{ csrf_token }}"}

$.ajax({
  type: "POST",
  url: patch,
  data:info,
    datatype:'json',

success: function(){

console.log('success')
return

}


})
}

观看次数:

if request.method == 'POST':
    response_json = request.POST
    response_json = json.dumps(response_json)
    data = json.loads(response_json)

       #do whatever you have to do with the model.

   return JsonResponse(safe=False)

如果您需要进一步的帮助,请留意。