Как сказано в ошибках, вы не можете просто создать Like
объект с:
Likes.objects.get_or_create(
<s>image_like=image_like</s>,
)
, поскольку ManyToManyField
действует как коллекция.
Однако он делает не кажется, в любом случае имеет смысл делать это. Вероятно, вам нужен ForeignKey
здесь, который ссылается на Image
:
class Like(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, blank=True)
image = models.<b>ForeignKey(Image, related_name='likes')</b>
likes = models.IntegerField(default=1)
Затем вы можете реализовать представление как:
def save_like(request,pk):
image_like = get_object_or_404(Image, pk=pk)
like_img, created = Like.objects.get_or_create(
image_id=pk,
user=request.user
)
if not created:
like_img.likes += 1
like_img.save()
return redirect('site:home')
Затем вы можете подсчитать количество лайков для объекта Image
путем суммирования likes
связанных Like
объектов.
Обратите внимание, что если пользователь может набрать Image
только один раз, тогда вы можете опустить поле likes
и логика c в операторе if
.