如何判断哪些字段已在Django查询集中延迟/仅被删除

Xea*_*lot 6 django django-models

我正在尝试使用我的自定义迭代器将查询集序列化为json.在模型上,我检测模型中的字段,并在需要时将它们插入到JSON字典中.

我无法确定如何使用延迟或仅查询集函数确定哪些字段已在模型中延迟.

有没有办法,以及如何找出哪些字段被推迟以及如何跳过它们?

Xea*_*lot 8

有点埋没......

queryset.query.get_loaded_field_names()


SMX*_*SMX 8

当前版本的Django(1.9)在所有模型实例上都有一个方法: instance.get_deferred_fields()

这似乎是阿列克谢答案的"官方"实施.


leh*_*ins 7

以下是如何检查实际模型实例是否延迟:

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 ....
Run Code Online (Sandbox Code Playgroud)

这样它就不会从db加载该字段.这个实现实际上来自django. https://github.com/django/django/blob/master/django/db/models/base.py#L415