我需要使用update()更新几个对象,而不是save()方法。 是否可以将模型转换为查询集来执行此操作?
否则我尝试了类似的事情:
objects = Article.objects.all()
ctype = ContentType.objects.get_for_model(Article)
objects.update( stats=process_data(F('id'), ctype) )
process_data获取与Article相关的其他对象,并在计算后返回float:
def process_data(object_id, content_type):
counts = Counter.objects.get(content_type=content_type, object_pk=object_id)
...
return float(calculation_based_on_counts)
不幸的是,这是不可能的。我得到一个MultipleObjectsReturned异常:
counter.models.MultipleObjectsReturned:get()返回多个Counter - 它返回15!查询参数为{' object_pk':,' content_type':}
感谢您的帮助!
答案 0 :(得分:0)
F
类不会返回值,正如您的代码所期望的那样。 F
个对象是表达式中的节点。
F
表达式只允许某个操作子集,主要是布尔逻辑和算术:不是任意函数。如果你对它的工作原理感兴趣,请看django/db/models/expressions.py
。它的记录不尽如人意。
在不知道你的计算是什么的情况下,不可能说F
是否可能。例如,如果您使用aggregate
表达式将update
与F
合并,则可以更新某些相关对象的总和。