繁体   English   中英

Django:为其所有相关模型访问模型的“ related_name”值

[英]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.lookupsLookup类的引用,但这似乎不适合我的情况。

好的,我最终使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM