如果 get_or_create 不存在则创建查询无效

Create query if not existing with get_or_create not working

我正在构建一个 Q/A 用户可以投票的地方。

我有两个模型,Topic 处理投票和问题,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()

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

ValueError at /qa/59/upvote Cannot assign "59": "VoteUser.topic" must be a "Topic" instance.

您似乎在尝试将 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()