首页 > 解决方案 > Django 用户等于用户语句

问题描述

如果用户尝试对自己的 category_request 进行投票,我想实现向用户显示一条消息,但不知何故它现在正在工作。我在这里以正确的方式访问对象吗?

视图.py

def category_request_up_vote (request, pk):
    category_request = get_object_or_404(CategoryRequests, pk=pk)
    try:
        if request.method == 'GET':
            if CategoryRequests_Vote.voter == CategoryRequests.author: #<< this statement
                messages.error(request, 'You are trying to vote a request you created by your own (Transmision ignored)')
                return redirect('category_request_detail', pk=category_request.pk)
            elif CategoryRequests_Vote.objects.filter(voter=request.user, voted=category_request).exists():
                messages.error(request, 'You already Voted this request. Double votes are not allowed (Transmision ignored)')
                return redirect('category_request_detail', pk=category_request.pk)
            else:
                category_request.up_vote = F('up_vote') + 1
                category_request.save()
                CategoryRequests_Vote.objects.create(voter=request.user, voted=category_request)
                messages.success(request, 'You have successfully Provided an Up-Vote for this Request')
                return redirect('category_request_detail', pk=category_request.pk)
        else:
            messages.error(request, 'Uuups, something went wrong, please try again.')
            return redirect('category_request_detail', pk=category_request.pk)
    except:
        messages.error(request, 'Uuups, something went wrong, please try again.')
        return redirect('category_request_detail', pk=category_request.pk)

模型.py

class CategoryRequests(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
...

    class CategoryRequests_Vote(models.Model):
        voter = models.ForeignKey(User, on_delete=models.CASCADE)
        voted = models.ForeignKey(CategoryRequests, 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()

标签: djangoview

解决方案


您正在比较 CategoryRequests_Vote.voter 和 CategoryRequests.author 这非常相似,您可以尝试这样的事情,

if not CategoryRequests.author == self.request.user:
     category_request.up_vote = F('up_vote') + 1
     # ...
else:
     raise PermissionDenied('You are trying to vote a request you created by your own')
return #..

您可以根据您的要求进行编辑。


推荐阅读