使用getattr()从Djang中具有不同字段类型的字段获取结果

2024-10-16 20:52:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型混合使用charfieldsManyToManyFields,问题是在某些字段具有不同值的情况下如何最好地返回字段。例如,使用Charfields我可以使用.__str()__,但这只适用于单值字段。然而,ManyToManyFields将存储一系列选项,这意味着.__str()__与存储的值和值无关,但可以通过.values_list()访问。在

我需要这样做的原因是,我有一个字段名列表,我正在循环,一次一个,并通过以下方式调用模型:

mylist = ["fieldA", "fieldB", "fieldC"]

MyModel = Model.objects.get(pk=ID) 

然后呢

^{pr2}$

因此,我希望能够提取字段值,而不需要事先知道它是什么类型的字段。有没有一个通用的方法可以让我这样做?在


Tags: 模型列表选项方式情况原因list字段名
1条回答
网友
1楼 · 发布于 2024-10-16 20:52:03

因此,听起来您需要一个特殊情况来处理关系字段,这些字段为您提供了一个模型管理器,并且需要所有相关实例的列表:

from django.db import models

field_names = ["fieldA", "fieldB", "fieldC"]
instance = MyModel.objects.get(pk=ID)

values = []
for field_name in field_names:
    value = getattr(instance, field_name)
    if isinstance(value, models.Manager):
        values.append(value.all())
    else:
        values.append(value)

['valueA', 'valueB', [<RelatedModel pk=1>, <RelatedModel pk=3>]]

相关问题 更多 >