如果get_or_create不存在则创建查询

时间:2020-06-08 13:25:30

标签: django django-views django-queryset

我正在建立一个用户可以投票的问答。

我有两个模型,主题,用于处理投票和问题,以及 VoteUser ,用于在用户投票时将布尔值设置为True。

def upvote(request, qa_id):
    qa = get_object_or_404(Topic, pk=qa_id)
    vote = VoteUser.objects.get_or_create(author=request.user, topic=qa_id)
    vote = get_object_or_404(VoteUser, author=request.user, topic=qa_id)

    if vote.vote_status == False:
        qa.votes += 1
        qa.save()
        vote.vote_status = True
        vote.save()

但是当我尝试请求时,它给了我一个错误:

/ pa / 59 / upvote中的

ValueError 无法分配“ 59”:“ VoteUser.topic”必须是“主题”实例。

1 个答案:

答案 0 :(得分:0)

好像您正在尝试将ID分配给topic而不是Topic实例。这应该起作用:

def upvote(request, qa_id):
    qa = get_object_or_404(Topic, pk=qa_id)
    vote, _ = VoteUser.objects.get_or_create(author=request.user, topic=qa)

    if vote.vote_status == False:
        qa.votes += 1
        qa.save()
        vote.vote_status = True
        vote.save()