Лайк ставится на все рецепты сразу

Рейтинг: 0Ответов: 0Опубликовано: 19.06.2023

Я хочу вделать кнопку 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',]```

Ответы

Ответов пока нет.