[英]Django: access a model's `related_name` values for all its related models
我有一个模型queryset
的,我需要为O2M和M2M关系进行缓存,使用prefetch_related
。
O2O关系也是如此,相应地使用select_related
。
我想将其作为通用实现来执行,在该实现中,我将找到相关模型的所有related_name
值,并按如下所示解压缩它们:
def cache_related():
related_names = [...] # the related_name values for the prefetchable related models
cached_queryset = queryset.prefetch_related(*related_names)
return cached_queryset
我目前使用以下方式访问这些值:
related_models = deepcopy(queryset.model._meta.related_objects)
related_names = [m.related_name for m in related_models]
问题是我真的不想直接访问受保护的_meta
值。
Django中是否有实用程序可返回模型O2O,O2M和M2M关系的所有related_name
值的列表?
我找到了对django.db.models.lookups
和Lookup
类的引用,但这似乎不适合我的情况。
好的,我最终使用Model _meta.get_fields()
方法,这要归功于Daniel Roseman消除了对此的第二种想法!
这是实现:
related_names = [
f.name for f in queryset.model._meta.get_fields()
if f.get_internal_type() in ['ForeignKey', 'ManyToManyField', 'OneToOneField']
]
我去了field.name
而不是field.related_name
,因为ForeignKey
类型显然没有相关名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.