Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- модель
- class Like(models.Model):
- like = models.BooleanField()
- user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)
- product = models.ForeignKey(Product, on_delete=models.CASCADE)
- вюха
- class LikeView(View):
- model = Product
- def post(self, request, pk):
- obj = self.model.objects.get(pk=pk)
- likes = Like.objects.get(product_id=obj.id)
- try:
- if request.user.is_authenticated():
- like = Like.objects.get(user=request.user)
- elif not request.user.is_authenticated():
- like = Like.objects.get(user_ip=get_ip(request))
- if like.like:
- like.like = False
- like.save()
- okay = 'False'
- elif not like.like:
- like.like = True
- like.save()
- okay = 'True'
- except like.DoesNotExist:
- if not request.user.is_authenticated():
- like = Like.objects.create(user_ip=get_ip(request), liked=True)
- else:
- like = Like.objects.create(user=request.user, liked=True)
- like.save()
- okay = 'new'
- return HttpResponse(
- json.dump({
- 'result': okay,
- 'like': likes.count(like=True),
- })
- )
- скрипт
- {% extends 'base.html' %}
- {% block content %}
- <div class="product_details">
- <img src="{{product.image.url}}"/>
- <button class="like" onclick="make_like()">Like</button>
- <h3>{{product.name}}</h3>
- <p class="desc">Description: <span>{{product.description}}</span></p>
- <p class="price">Price: <span>{{product.price}}</span></p>
- </div>
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
- </script>
- <script>
- function make_like(){
- var like = $(this)
- var pk = {{product.id}}
- var
- $.ajax({
- url : window.location.href + "/like/",
- type : 'POST',
- data : {obj: pk},
- success:function(json){
- if(json.result == 'new'){
- $('.like').css('background','#FF0000');
- }else if(json.result == 'False'){
- $('.like').css('background','');
- }else if(json.result == 'True'){
- $('.like').css('background','#FF0000');
- }
- }
- })
- }
- </script>
- {%endblock%}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement