Здравствуйте. На сайте есть необходимость прикрутить рейтинг пользователей написавших статью. Рейтинг сделал, но нужно реализовать механизм проверки "Лайкнувших пользователей", т.е. каждый зарегинный юзер может ставить лайк только один раз. Я создал поле CharField у юзера и в нем сохраняю id пользователя, который лайкает. Рейтинг = лайки - дизлайки.
Модель пользователя
class Author(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatar', blank=True)
like = models.IntegerField(default=0, verbose_name='Нравится')
dislike = models.IntegerField(default=0, verbose_name='Не нравится')
user_like_list = models.CharField(max_length=300, blank=True, verbose_name='id лайкнувших пользователей')
Функция лайка
def add_like(request, slug):
article = Article.objects.get(slug=slug)
try:
article = get_object_or_404(Article, slug=slug)
article.author.user_like_list = article.author.user_like_list + str(request.user.id) + ','
user_list = []
for item in article.author.user_like_list:
user_list.append(item)
if request.user.id in user_list:
return redirect('article', slug=slug)
else:
article.author.like += 1
article.author.save()
Как это реализовать правильно и проще?