Джанго назначить объект запроса в массив - PullRequest
0 голосов
/ 15 мая 2011

Как назначить объект запроса в массив? Как назначить тест в test_list? Так что я могу назначить его для использования в шаблоне. Может ли шаблон повторять список?

test_list = []

tests = Test.objects.all()

for test in tests:
   test_list.append(test)

return render_to_response('index.html', 
                         {'tests':test_list},)

Шаблон:

{% for test in tests %}
    {{ test.name|safe }}
{% endfor %}

Я получаю эту ошибку:

Caught TypeError while rendering: 'Test' object is not iterable

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Вопрос в том, почему вы хотите иметь результаты Test.objects.all в «массиве»? (в Python его называют list )

В вашем коде tests - это объект набора запросов, который уже поддерживает большинство операций «массива», включая нарезку и т. Д. И т. Д. Редактировать: это также означает, что вы можете обращаться к ним и повторять их в шаблоне. (Шаблоны django могут повторять любой «итерируемый» объект python afaik.

Во-вторых, вы, вероятно, должны позволить базе данных выполнять запросы, так как она сделает это более эффективно, используя набор запросов django filter

test = Test.objects.all (amount__gt = 0)

Если вам все еще нужен список, хороший способ создать его - использовать понимание списка :

test_list = [тест для теста в Test.objects.all (), если test.quantity> 0]

0 голосов
/ 15 мая 2011

Больше вопросов о Python, чем о Django, но используйте функцию append ().

#don't use this one for your use case!
for test in tests:
  if test.quantity > 0:
     test_list.append(test)

Кроме того, было бы более целесообразно выполнить фильтрацию в базе данных

# get all items the quantity of which is greater than 0
tests = Test.objects.filter(quantity__gt=0)

Ваш текущий код неверен, потому что:

tests = Test.objects.all()
for test in tests:
  # this statement is meaningless, it is always executed, you can just omit
  # this
  if True:
     #you are overwriting/-defining test_list variable
     #should be test_list.append(test)

     test_list = test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...