【问题标题】:Django: dynamically access queryset data from different modelsDjango:动态访问来自不同模型的查询集数据
【发布时间】:2019-04-14 10:50:05
【问题描述】:

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

这是一个例子:

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

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

非常感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    你可以这样试试:

    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 %}
    

    【讨论】:

    • 谢谢你,@ruddra 它工作得很好,我非常非常感谢你为我节省了很多打字时间。
    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多