Как создать кнопку «лайк» для всех сообщений с django и jquery? - PullRequest
0 голосов
/ 28 апреля 2019

Я хочу создать кнопку «Мне нравится» для моего веб-сайта django с помощью ajax.

Я уже создал кнопку «Мне нравится», но эта кнопка принимает несколько лайков от одного пользователя.

Теперь я хочу создать кнопку, которая может принимать одну пользовательскую кнопку.

1 Ответ

0 голосов
/ 28 апреля 2019

Вам потребуется 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)
    })
})

...