这是我的模型:
class Vote(models.Model):
answer = models.ForeignKey(Answer, on_delete=models.CASCADE, blank=False)
author = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)
def __str__(self):
return str(self.answer)
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
answer = models.CharField(max_length=1000, default="", blank=False)
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
createdAt = models.DateTimeField(auto_now_add=True)
votes = models.IntegerField(default=0)
def __str__(self):
return str(self.answer)
字符串
下面是我的序列化器:
class VoteSerailizer(serializers.ModelSerializer):
class Meta:
model = Vote
fields = '__all__'
型
以下是我的看法:
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def upvote(request, pk):
answer = get_object_or_404(Answer, id=pk)
if answer['author'] == request.user:
return Response({
'error':"You cannot vote twice."
})
answer.votes += 1
answer.save()
return Response({
'details':'Vote added'
}, status.HTTP_202_ACCEPTED)
型
它在我的视图循环中显示错误“TypeError:'Answer' object is not subscriptable”。
我需要在我的数据库中添加作者和答案,即模型,我怎么能做到这一点
1条答案
按热度按时间ibrsph3r1#
好吧,你有一个
Vote
模型,但你似乎没有使用它(有效)。如果你不跟踪谁已经投票,你当然不能知道。我建议 * 不要 * 将投票数添加到
Answer
:您可以在需要时通过 annotation 确定。你可以做的就是检查
Vote
是否已经存在,如果不存在,就添加一个,所以:字符串
所以
Answer
模型看起来像:型
当您需要投票数时,请使用以下内容注解
Answer
(s):型
备注:通常Django模型中字段的名称都是用 snake_case 而不是 PascalCase 写的,所以应该是:
created_at
而不是createdAt
。备注:通常使用**
settings.AUTH_USER_MODEL
[Django-doc]引用用户模型比直接使用User
**模型[Django-doc]更好。有关更多信息,您可以查看文档的 * 引用User
模型 * 部分。