Django реализация view
Модель:
class LikeDislike(models.Model):
like = models.ManyToManyField(User,related_name='like')
dis_like = models.ManyToManyField(User, related_name='dis_like')
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
def __str__(self) -> str:
return f'{self.content_object.title},{self.content_object}'
class Meta:
verbose_name = 'Лайки'
verbose_name_plural = 'Лайки'
view:
class LikeView(View):
model = None
vote = None
def post(self, request, pk):
vt = self.vote
obj = self.model.objects.get(pk=pk)
if list(obj.vote.all()) == []:
like_obj = LikeDislike.objects.create(content_object=obj)
else:
like_obj = LikeDislike.objects.get(object_id=obj.id)
if request.user in like.like.all():
like_obj.like.remove(request.user)
elif request.user in like.dis_like.all():
like_obj.dis_like.remove(request.user)
else:
like_obj.like.add(request.user)
return HttpResponseRedirect(reverse('detail_post', args=[str(pk)]))
urlpatterns:
path('like/<int:pk>/', views.LikeView.as_view(model=Post, vote=LikeDislike.like), name='like')
Не могу сообразить, как написать код что-бы, вlike_obj.like.remove(request.user)
подставить переменную vt
вместо like
.При выполнение выше поставленной задачи, django ругается, что в классе Likedislike
, нету аргумента vt
. Суть данной задачи заключается в том, что-бы не писать новую вьюшку, а ограничится одной, изменяя на нужный аргумент класса в urlpatterns.