django - 如果 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”实例。
解决方案
看起来您正在尝试将 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()
推荐阅读
- c++ - 如何在 C++ 中将迭代器作为函数参数传递
- token - 如何仅使用 OAuth 访问令牌将 ibm watson 聊天机器人与 slack 集成
- c++ - MinGW 的“-fno-elide-constructors”的类似物是什么?
- mediawiki - 具有多个表达式的 mediawiki api 搜索查询
- java - 在枚举中实现 Runnable
- django - 如何在Django rest框架中嵌套抽象关系?
- regex - 如何在 PowerShell 中使用带有正则表达式的条件语句?
- embedded-linux - 嵌入式 Linux 的启动卡住了。如何调试?
- android - 如何获取文档 ID?Firestore 分页
- java - -129 != -129 在 Java 整数集合(集合
)