Лайк ставится на все рецепты сразу
Я хочу вделать кнопку like для каждого рецепта но когда я нажимаю на рецепт "лайк", он автоматом лайкает все рецепты которые находятся на странице а я хочу что только один.
def likeView(request, pk):
post = get_object_or_404(recipes, id=pk)
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
else:
post.likes.add(request.user)
return HttpResponseRedirect(reverse("all_recipes"))
class All_Recipes(ListView):
"""
View all recipes
"""
template_name = "add_recipe/all_recipes.html"
model = recipes
context_object_name = "all_recipes"
paginate_by = 2
queryset = recipes.objects.all()
def get_queryset(self, **kwargs):
query = self.request.GET.get('q')
if query:
recipes = self.model.objects.filter(
Q(title__icontains=query) |
Q(description__icontains=query) |
Q(instructions__icontains=query) |
Q(meal_type__icontains=query)
)
else:
recipes = self.model.objects.all()
return recipes
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
recipe_object = data['object_list'].first()
if recipe_object is not None:
pk = recipe_object.pk
likes_connected = get_object_or_404(recipes, id=pk)
likes_list = likes_connected.likes.all()
liked = False
if likes_list.filter(id=self.request.user.id).exists():
liked = True
data['number_of_likes'] = likes_connected.number_of_likes()
data['post_is_liked'] = liked
return data
"""
A model to create and manage recipes
"""
user = models.ForeignKey(User, related_name='recipe_owner', on_delete=models.CASCADE)
title = models.CharField(max_length=300, null=False, blank=False)
description = models.CharField(max_length=500, null=False, blank=False)
ingredients = RichTextField(max_length=10000, null=False, blank=False)
instructions = RichTextField(max_length=10000, null=False, blank=False, default='')
image = ResizedImageField(size=[400, None], quality=75, upload_to='add_recipe/', force_format='WEBP', blank=False, null=False)
image_alt = models.CharField(max_length=100, null=False, blank=False)
meal_type = models.CharField(max_length=50, choices=MEAL_TYPES, default='breakfast')
posted_date = models.DateTimeField(auto_now_add=True)
likes = models.ManyToManyField(User, related_name="recipe_like", blank=True)
def number_of_likes(self):
return self.likes.count()
class Meta:
ordering = ['-posted_date',]```
Источник: Stack Overflow на русском