Django: динамический доступ к данным набора запросов из разных моделей - PullRequest
0 голосов
/ 11 ноября 2018

Мне интересно узнать, как отобразить все атрибуты списка наборов запросов , которые поступают из разных моделей .

Вот пример:

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 голосов
/ 11 ноября 2018

Вы можете попробовать вот так:

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