ограничение доступа пользователя к посту один раз в Views.py, а не в модели - PullRequest
0 голосов
/ 09 июня 2019

Я знаю, что могу легко сделать это в models.py, но в моем приложении нет модели «Мне нравится». У меня есть почтовое приложение, и есть как поле. поэтому я хочу ограничить это в моих views.py Вот моя попытка, но я не понимаю, почему это не будет ограничивать

@login_required
def like_post(request, pk):
    if User.objects.filter(pk = pk, id = request.user.id).exists():
        return HttpResponse('You already voted for this, cheater')
    else:
        liked_post = Post.objects.get(id=pk)
        count = liked_post.likes
        count += 1
        liked_post.likes = count
        liked_post.save()


    return redirect('/community/post/%s' %liked_post.id)

1 Ответ

0 голосов
/ 09 июня 2019

Прежде всего об ошибках: в заявлении «если» вы пытаетесь найти пользователя по первичному ключу сообщения.Более того, вы выполняете поиск как по id, так и по pk, хотя они технически одинаковы в вашем случае.См .: Запросы Django - id против pk

Что касается реализации: я боюсь, что в вашей реализации невозможно отследить "читеры".Вы не можете понять, что «Этот пользователь уже понравился этот пост», не сохраняя лайки.Нет данных, подтверждающих этот факт.С частью «остальное» все в порядке, но если вы хотите отследить «likers», вам понадобятся некоторые настройки.

Самый простой вариант - добавить поле ManyToMany, ссылающееся на User, к вашей модели Post и назвать его «likers».Таблица с колонками «user_id», «post_id» будет создана под капотом и скажет, что «Этому пользователю понравился этот пост».

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
    ...
    likers = models.ManyToManyField(User)
    ...

А на ваш взгляд liked_post.likers.add(request.user), чтобы добавить текущего пользователялюбителям и liked_post.likers.filter(user=request.user).exists() найти "читеров"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...