In the following this error…
I have problems getting the number of likes for products and removing likes from the list of favorites.
like correctly in the database (add to favorite) but I don’t know how to get their number and make it dynamic in JavaScript codes by Ajax.
Can you look at my codes and give me the necessary guidance, what should I add or remove? thank you!
favorite.py
from apps.comment_scoring_favorites.models import Favorite
class favoriteProduct:
def __init__(self,request) -> None:
self.session=request.session
favorite_product=self.session.get('favorite_product')
if not favorite_product:
favorite_product=self.session['favorite_product']=[]
self.favorite_product=favorite_product
self.count=Favorite.count_favorites_by_session()
def __iter__(self):
favorite_product=self.favorite_product.copy()
for item in favorite_product:
yield item
def add_to_favorite_product(self,productId):
productId=int(productId)
if productId not in self.favorite_product:
self.favorite_product.append(productId)
self.count=Favorite.count_favorites_by_session()
self.session.modified=True
def delete_from_favorite_product(self, productId):
productId=int(productId)
self.favorite_product.remove(productId)
self.count=Favorite.count_favorites_by_session()
self.session.modified=True
middleware.py
import threading
class RequestMiddleware:
def __init__(self,get_response,thread_local=threading.local()):
self.get_response=get_response
self.thread_local=thread_local
def __call__(self,request):
self.thread_local.current_request=request
response=self.get_response(request)
return response
models.py
from middlewares.middleware import RequestMiddleware
class Favorite(models.Model):
product=models.ForeignKey(Product,on_delete=models.CASCADE,related_name='favorite_product',verbose_name='کالا')
favorite_user=models.ForeignKey(CustomUser, on_delete=models.CASCADE,related_name='favorite_user1',verbose_name='کاربر علاقه مند')
register_date=models.DateTimeField(auto_now_add=True,verbose_name='تاریخ درج')
def __str__(self) -> str:
return f"{self.product} - {self.favorite_user}"
class Meta:
verbose_name='علاقه'
verbose_name_plural='علایق'
def count_favorites_by_session(self):
request=RequestMiddleware(get_response=None)
request=request.thread_local.current_reques
session=request.session
favorite_product_ids =session.get('favorite_product')
return self.objects.filter(product__id__in=favorite_product_ids).count()
views.py
class ShowFavoriteListView(View):
def get(self,request,*args,**kwargs):
favorite_list=favoriteProduct(request)
context={
'favorite_list':favorite_list,
}
return render(request,'csf_app/partials/create_favorites.html',context)
def statuse_of_favorite_list(request):
favoriteList=favoriteProduct(request)
return HttpResponse(favoriteList.count)
def add_to_favorite(request):
productId=request.GET.get('productId')
product=Product.objects.get(id=productId)
flag=Favorite.objects.filter(
Q(favorite_user_id=request.user.id) &
Q(product_id=productId)).exists()
if(not flag):
Favorite.objects.create(
product=product,
favorite_user=request.user,
)
return HttpResponse('added to favorite lists')
return HttpResponse('it was in favorite')
def delete_from_favorite(request):
productId=request.GET.get('productId')
favoriteList=favoriteProduct(request)
favoriteList.delete_from_favorite_product(productId)
return redirect('csf:user_favorite_list')
class UserFavoriteView(View):
def get(self,request,*args,**kwargs):
user_favorite_products=Favorite.objects.filter(Q(favorite_user_id=request.user.id))
return render(request,'csf_app/user_favorite.html',{'user_favorite_products':user_favorite_products})
urls.py
from django.urls import path
from . import views
app_name='csf'
urlpatterns = [
path('create_comment/<slug:slug>/',views.CommentView.as_view(),name='create_comment'),
path('add_score/',views.add_score,name='add_score'),
path('add_to_favorite/',views.add_to_favorite,name='add_to_favorite'),
path('user_favorite_list/',views.UserFavoriteView.as_view(),name='user_favorite_list'),
path('delete_from_favorite/',views.delete_from_favorite,name='delete_from_favorite'),
path('statuse_of_favorite_list/',views.statuse_of_favorite_list,name='statuse_of_favorite_list'),
]
myscript.js
statuse_of_favorite_list();
function statuse_of_favorite_list(){
$.ajax({
type:"GET",
url:"/csf/statuse_of_favorite_list/",
success: function(res){
$('#favorite_count_icon').show();
$('#favorite_count').text(res);
}
});
}
function addToFavorite(productId){
$.ajax({
type:"GET",
url:"/csf/add_to_favorite/",
data:{
productId: productId,
},
success: function(res){
alert(res)
statuse_of_favorite_list();
}
});
}
function deleteFromFavorite(product_id){
$.ajax({
type:"GET",
url:"/csf/delete_from_favorite/",
data:{
product_id:product_id,
},
success:function(res){
alert('deleted!');
$("#favorite_list").html(res);
statuse_of_favorite_list();
}
});
}
createfavorites.html
{% load render_partial %}
{% load humanize %}
{% block titile %}
{% endblock titile %}
{% block content %}
<div id="favorite_list">
{% render_partial 'csf:user_favorite_list' %}
</div>
{% endblock %}
usre_favorite.html
{% extends 'main_template.html' %}
{% load render_partial %}
{% load humanize %}
{% block titile %}
WishList...
{% endblock titile %}
{% block content %}
<div class="site__body">
<div class="page-header">
<div class="page-header__container container">
<div class="page-header__breadcrumb">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'main:index' %}">Home</a>
/
</li>
<li class="breadcrumb-item active" aria-current="page">Favorites</li>
</ol>
</nav>
</div>
<div class="page-header__title">
<h1>Favorites</h1></div>
</div>
</div>
<div class="block">
<div class="container">
<table class="wishlist">
<thead class="wishlist__head">
<tr class="wishlist__row">
<th class="wishlist__column wishlist__column--image">image</th>
<th class="wishlist__column wishlist__column--product">product</th>
<th class="wishlist__column wishlist__column--stock">stock</th>
<th class="wishlist__column wishlist__column--price">price</th>
<th class="wishlist__column wishlist__column--tocart">buy or not buy</th>
<th class="wishlist__column wishlist__column--remove">delete</th>
</tr>
</thead>
<tbody class="wishlist__body">
{% for favorite in user_favorite_products %}
<tr class="wishlist__row">
<td class="wishlist__column wishlist__column--image">
<a href=""><img src="{{media_url}}{{favorite.product.image_name}}" alt=""></a>
</td>
<td class="wishlist__column wishlist__column--product">
<a href="" class="wishlist__product-name">
{{favorite.product.product_name}}
</a>
</td>
<td class="wishlist__column wishlist__column--stock">
{% if favorite.product.get_number_in_warehouse > 0 %}
<div class="badge badge-success">موجود در انبار</div>
{% else %}
<div class="badge badge-danger">موجود نمی باشد </div>
{% endif %}
</td>
<td class="wishlist__column wishlist__column--price"> {{favorite.product.price}} تومان</td>
<td class="wishlist__column wishlist__column--tocart">
{% if favorite.product.get_number_in_warehouse > 0 %}
<button type="button" class="btn btn-primary btn-sm" onclick="add_to_shop_cart({{favorite.product.id}},1)">افزودن به سبد</button>
</td>
{% else %}
<button type="button" class="btn btn-info disable btn-sm">افزودن به سبد</button>
{% endif %}
<td class="cart-table__column cart-table__column--remove">
<a type="button" class="btn btn-light btn-sm btn-svg-icon" onclick="deleteFromFavorite({{favorite.product.id}})">
<i class="fa fa-trash"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock content %}