Результаты голосования Джанго в двойном счете - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь просто добиться того, чтобы голос за публикацию получил счет +1, если пользователь нажимает кнопку «Мне нравится» на моем сайте, но по некоторым причинам он не считается +1, вместо этого он подсчитывает +2, если я нажму URL этого почта:

views.py

def post_up_vote (request, pk):
    post = get_object_or_404(Post, pk=pk)
    try:
        if request.method == 'GET':
            if post.author == request.user:
                messages.error(request, 'You are trying to vote on a Post you created by your own. Thats not possible.')
                return redirect('post_detail', pk=post.pk)
            if Post_Vote.objects.filter(voter=request.user, voted=post).exists():
                messages.error(request, 'You already Voted this Post. Double votes are not allowed.')
                return redirect('post_detail', pk=post.pk)
            else:
                post.up_vote = F('up_vote') + 1
                post.save()
                Post_Vote.objects.create(voter=request.user, voted=post)
                messages.success(request, 'You have successfully Provided an Up-Vote for this Post.')
                return redirect('post_detail', pk=post.pk)
        else:
            messages.error(request, 'Something went wrong, please try again.')
            return redirect('post_detail', pk=post.pk)
    except:
        messages.error(request, 'Something went wrong, please try again.')
        return redirect('post_detail', pk=post.pk)

models.py

class Post(models.Model):
...
up_vote = models.IntegerField(default=0)
down_vote = models.IntegerField(default=0)
...

class Post_Vote(models.Model):

voter = models.ForeignKey(User, on_delete=models.CASCADE)
voted = models.ForeignKey(Post, on_delete=models.CASCADE)
published_date = models.DateField(auto_now_add=True, null=True)

class Meta:
    unique_together = ('voter', 'voted')

def publish(self):
    self.published_date = timezone.now()
    self.save()

urls.py

url(r'^post/(?P<pk>\d+)/up-vote/$', app.post_up_vote, name='post_up_vote'),

template.html

 <a href="{% url 'post_up_vote' pk=post.pk %}"> <i class="btn success fa fa-thumbs-up"></i></a>

если я создаю новое сообщение на своем сайте и голосую по этому сообщению с другим пользователем, а затем с первоначальным автором сообщения, то при подсчете голосов учитывается +2, а не +1, и я не вижу никакой причины для этого.

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

F () объекты, назначенные полям модели, сохраняются после сохранения экземпляра модели и будут применяться при каждом сохранении ().

post.up_vote = F('up_vote') + 1
post.save()
post.refresh_from_db()
0 голосов
/ 07 апреля 2019

можно попробовать post.up_vote += 1.

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