Как я могу извлечь имена полей и значения из запроса Django - PullRequest
3 голосов
/ 07 июля 2011

Предположим, у меня есть эта модель

class Model():
          var1      = models.TextField()
          var2      = models.FloatField()
          var3      = models.FloatField()
          var4      = models.FloatField()

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

  1. Я хочу отобразить var1, var2, var 4, а не var 3
  2. В шаблоне я не хочу жестко кодировать имена полей, такие как var1, Вар2, Вар3, который я сделаю заголовок таблицы, так что я хотел бы хотел бы получить это из массива
  3. Я хочу получить все данные, соответствующие этим переменным

В основном я хочу что-то вроде

Object_List, который содержит field names и field values для all rows в таблице БД

Object_List - Я возьму форму SELECT var1, var2, var4 from table

чтобы в шаблоне я мог использовать

{% for field in Object_List.fields %}
  <th>{{ field }}</th> 
 {% endfor %}

Тогда для данных я могу использовать

 {% for object in Object_List.objects %}
            <tr>
            {% for field in object %}
                 <td>{{ value }}</td> 
            {% endfor %}
            </tr>
 {% endfor %}

Я не уверен, объяснил ли я это ясно. Возможно ли достичь чего-то подобного. Основное требование - чтобы в шаблоне отображались только выбранные поля, а не все поля, указанные в модели

1 Ответ

5 голосов
/ 07 июля 2011

Кажется, что очевидный способ сделать это - использовать запрос values:

objects = Model.objects.values('var1', 'var2', 'var4')

Это дает вам список словарей, каждый из которых сопоставляет имя поля со значением поля. Таким образом, вы можете получить строку заголовка из первого из них:

{% for object in objects %}
    {% if forloop.first %}
    <th>
       {% for fieldname in object.keys %}<td>{{ fieldname }}</td>{% endfor %}
    </th>
    {% endif %}
    <tr>
      {% for value in object.values %}<td>{{ value }}</td>{% endfor %}
    </tr>
{% endfor %}
...