django - 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()
解决方案
您正在比较 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 #..
您可以根据您的要求进行编辑。
推荐阅读
- excel - 我想将函数应用于 Power Query M 中表的每一行,并将列表作为结果
- java - Process.waitFor() 不“等待”当前线程完成
- java - 如何从 IP 解析 DNS 名称?
- sql - 如何在sql server的表中获取所有使用列级加密的列?
- python - 用另一个变量替换句子的一部分
- android - 将 POJO 添加到 Room 数据库表中
- python-3.x - 从 GaussianProcessor 迁移到 GaussianProcessRegressor
- docker-compose - Magento 2 Cloud Docker 部署问题
- flutter - 如何在谷歌地图 Flutter 中动态绘制多边形
- docker-build - 无法使用 Dockerfile 构建映像