【发布时间】:2012-05-01 03:12:31
【问题描述】:
我不明白“直接”是做什么用的。
我对 _meta.get_field_by_name 做了一些谷歌研究,发现 Given a QS field lookup key, how to find fields type across joins?
但是“ORM 的查找”在 django 中是什么意思?
【问题讨论】:
我不明白“直接”是做什么用的。
我对 _meta.get_field_by_name 做了一些谷歌研究,发现 Given a QS field lookup key, how to find fields type across joins?
但是“ORM 的查找”在 django 中是什么意思?
【问题讨论】:
从django.db.models.options 中Django Options 对象的_name_map 属性的数量来看,它似乎与您使用的字段名称是Model 中声明的字段还是创建的名称有关来自related name 设置。恐怕我对相关名称的东西不熟悉,但代码看起来像:
for f, model in self.get_all_related_m2m_objects_with_model():
cache[f.field.related_query_name()] = (f, model, False, True)
for f, model in self.get_all_related_objects_with_model():
cache[f.field.related_query_name()] = (f, model, False, False)
for f, model in self.get_m2m_with_model():
cache[f.name] = (f, model, True, True)
for f, model in self.get_fields_with_model():
cache[f.name] = (f, model, True, False)
for f in self.virtual_fields:
if hasattr(f, 'related'):
cache[f.name] = (f.related, None if f.model == self.model else f.model, True, False)
因此,您只能看到前两个 for 循环使用具有 direct 和 False 的条目填充缓存,并且它们使用 related_query_name。也许其他人可以在您提出问题后的 2 和 1/2 年内更清楚地了解它,或者更有可能的是,您自己已经弄清楚了 :)
【讨论】: