首页 > 解决方案 > 如果 get_or_create 不存在,则创建查询不起作用

问题描述

我正在建立一个用户可以投票的 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()

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

/qa/59/upvote 处的 ValueError 无法分配“59”:“VoteUser.topic”必须是“Topic”实例。

标签: djangodjango-viewsdjango-queryset

解决方案


看起来您正在尝试将 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()

推荐阅读