Django:动态访问来自不同模型的queryset数据

时间:2018-11-11 14:54:23

标签: django python-3.x django-views django-queryset

我有兴趣学习如何显示来自不同模型的查询集列表的所有属性。

这是一个例子:

models.py

class MyModelA(models.Model):
    attr1 = something
    attr2 = something 

class MyModelB(models.Model):
    attr3 = something
    attr4 = something 

class MyModelC(models.Model):
    attr5 = something
    attr6 = something 

views.py

假设我们有三个存储在列表中的模型实例:

all_selected_queries = [mymodela, mymodelb, mymodelc]

对于列表中的每个查询集,我想在模板中显示所有模型字段标题和数据。

我的方法:

# Loop through the list and get the verbose name title of each field ("titel")

for z in all_selected_queries:
    queryset_fields = z._meta.get_fields()
        for f in queryset_fields:
            titel = f.verbose_name.title()
            return titel

我面临的挑战是如何在不包含实际属性名称的情况下获取字段的值(因为每个查询集的字段名称不同)。

因此,无需明确调用

f.attr1, f.attr2, f.attr3, f.attr4, f.attr5

对于每个领域,我想遇到一个跨模型边界的解决方案。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以尝试这样:

v_list = list()
for z in all_selected_queries:
    queryset_fields = z._meta.get_fields()
    values = dict()
    for f in queryset_fields:
        values[f.verbose_name.title()] = getattr(z, f.attname)
    v_list.append(values)
return render(request,'some_template.html',{'values':v_list})

并在模板中显示它们:

{% for value in values %}
  {% for key, val in value.items %}
    <b>{{ key }}: </b>{{ val }}
  {% endfor %}
{% endfor %}