Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django F-object工作不正常?_Python_Sql_Django_Django Models - Fatal编程技术网

Python Django F-object工作不正常?

Python Django F-object工作不正常?,python,sql,django,django-models,Python,Sql,Django,Django Models,我有Django模型 class QuestDocument(Model): document = models.ForeignKey(Document, on_delete=models.PROTECT) quest = models.ForeignKey(Quest, on_delete=models.PROTECT) is_actual = models.BooleanField() 我尝试根据条件“如果doc\u id中的document\u id,则is\u

我有Django模型

class QuestDocument(Model):
    document = models.ForeignKey(Document, on_delete=models.PROTECT)
    quest = models.ForeignKey(Quest, on_delete=models.PROTECT)
    is_actual = models.BooleanField()
我尝试根据条件“如果
doc\u id
中的
document\u id
,则
is\u actual
应为真,否则为假”更新
is\u 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

p.S.问题通过以下方式解决:

QuestDocument.objects.filter(quest_id=q.id).update(is_actual=Case(When(document_id__in=doc_ids, then=True), default=False))

但是现在我想了解,当我在doc\u id中使用
update(is\u actual=F('document\u id'))时会发生什么情况
回答最后一个问题-“但是现在我想了解,当我使用”时会发生什么情况。实际上这很简单,现在F('document_id')是一个对象

>>> type(F('document_id'))
<class 'django.db.models.expressions.F'>
>类型(F('document_id'))
所以,当您在doc_id)中写入F('document_id')时,它将在构造sql查询之前进行计算,并变为True或False