【问题标题】:how to creating a like button for all posts with django and jquery?如何使用 django 和 jquery 为所有帖子创建一个赞按钮?
【发布时间】:2019-09-17 02:32:37
【问题描述】:

我想用 ajax 为我的 django 网站创建一个赞按钮。

我已经创建了一个“赞”按钮,但该按钮接受来自单个用户的多个赞。

现在我想创建一个按钮,每个用户可以选择一个。

【问题讨论】:

  • 您尚未共享您的代码。虽然这个问题已经有了答案,但是分享你的代码更好,这样其他人可以指出你哪里做错了。

标签: django ajax django-models django-templates


【解决方案1】:

您必须有一个 AJAX 请求来发送被喜欢的项目,然后在视图中处理它。

models.py

class Movie(models.Model):
    name = models.CharField(max_length=55, blank=False)

    def __str__:
        return self.name

class MovieLike(models.Model):
    movie = models.ForeignKey(Movie, blank=False, null=False)
    user = models.ForeignKey(User, blank=False, null=False)

    class Meta:
        unique_together = ('movie', 'user',)

    def __str__:
        return self.movie.name

views.py

class LikeView(View):
    def post(self, request, *args, **kwargs):
        user = request.user
        movie_id = request.POST['movie_id']
        movie = Movie.objects.get(id=movie_id)
        user_liked, created = MovieLike.objects.get_or_create(movie=movie, user=user)
        return JsonResponse({"created": created})

urls.py

urlpatterns = [
    ...
    path('movie/like/', views.LikeView.as_view(), name='movie_like'),
    ...
]

html

<a href="#" class="js-likeMovie" data-movie-id="{{ movie.id }}">
    Like Movie
</a>

jQuery AJAX

document.querySelectorAll('.js-likeMovie').addEventListener('click', function (e) {
    e.preventDefault()

    var movie_id = this.getAttribute('data-movie-id');

    $.ajax({
        type: "POST",
        url: "{url 'movie_like'}",
        data: {csrfmiddlewaretoken: "{{ csrf_token }}", movie_id: movie_id}
    })
    .done(function (response) {
        console.log(response)
    })
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2019-05-17
    • 2020-08-14
    • 2013-03-05
    相关资源
    最近更新 更多