我遵循了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的新手,所以您可能提供的任何信息都请解释一下。
答案 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)
如果您需要进一步的帮助,请留意。