我正在尝试使用自定义迭代器将查询集序列化为json。在模型上,我检测模型中的字段,并根据需要将它们插入到JSON字典中。
我无法确定如何使用延迟或仅查询集功能确定哪些字段已在模型中延迟。
有没有办法,以及如何找出哪些字段被推迟以及如何跳过它们?
答案 0 :(得分:7)
有点埋葬......
queryset.query.get_loaded_field_names()
答案 1 :(得分:7)
当前版本的Django(1.9)在所有模型实例上都有一个方法:
instance.get_deferred_fields()
这似乎是阿列克谢回答的“官方”实施。
答案 2 :(得分:6)
以下是检查实际模型实例是否延迟的方法:
from django.db.models.query_utils import DeferredAttribute
for field in model_istance._meta.concrete_fields:
if not isinstance(model_instance.__class__.__dict__.get(field.attname), DeferredAttribute):
# insert in json dict or whatever need to be done ....
这样它就不会从db加载该字段。这个实现实际上来自django。 https://github.com/django/django/blob/master/django/db/models/base.py#L415