【发布时间】:2018-02-22 09:56:04
【问题描述】:
我有 Django 模型
class QuestDocument(Model):
document = models.ForeignKey(Document, on_delete=models.PROTECT)
quest = models.ForeignKey(Quest, on_delete=models.PROTECT)
is_actual = models.BooleanField()
我尝试根据条件更新is_actual 字段“如果doc_ids 中的document_id 则is_actual 应该为真,否则 - 假”。
我试过这个:
QuestDocument.objects.filter(quest_id=q.id).update(is_actual=F('document_id') in doc_ids)
但是得到了以下生成的 SQL:
UPDATE "quest_document" SET "is_actual" = false WHERE "quest_document"."quest_id" = 1;
我预计 SQL case 会使用。现在不明白为什么要得到这样的SQL。
附:问题解决了
QuestDocument.objects.filter(quest_id=q.id).update(is_actual=Case(When(document_id__in=doc_ids, then=True), default=False))
但现在我想了解,当我使用update(is_actual=F('document_id') in doc_ids) 时会发生什么
【问题讨论】:
标签: python sql django django-models