2013-04-24 4 views
0

У меня есть объект, который я пытаюсь выполнить в моем шаблоне.Django object is not itable

Моя проблема заключается в том, что одна из полех ответа содержит JSon данных, и я получаю сообщение об ошибке

сделки»объект не итерация

{% for item in transaction %} 
    {{ item.notjson_fields}} 

    {% for jsonItem in item.response %} 

     {{jsonItem}} 

    {% endfor %} 

{% endfor %} 

Модели:

date_created = models.DateTimeField(auto_now_add=True) 
request = JSONField() 
response = JSONField() 
+0

Я предположил, что это была ошибка да. – GrantU

+0

Что такое 'transaction'? – Ngenator

+0

@Ngenator ничего не показывает. а транзакция - транзакция = get_object_or_404 (Transaction, vendor_tx_id = id) одно поле имеет данные json tho в db – GrantU

ответ

2

Вы пытаетесь перебрать объект Transaction, который не является итерируемым.

Try что-то вроде

{{ transaction.notjson_fields}} 

{% for jsonItem in transaction.response %} 
    {{ jsonItem }} 
{% endfor %} 

Я не могу быть уверен, хотя и не зная, что Transaction выглядит


Edit:

Поскольку реакция является JSONField, вы можете получить доступ к нему как дикт. Просто сделайте

{{ transaction.response.amount }} 
+0

ok thats, похоже, работает, но как я могу получить значение {{jsonItem.amount}} пустое место, где {{jsonItem}} - все поля – GrantU

+0

Это может быть строка. Вы вообще десериализируете его? Как он хранится в базе данных? – Ngenator

+0

Ответ является прямым хранилищем запроса json, который я получаю, т.е. в db это выглядит как {«VendorTxCode»: «k34m73cr3rhrnghuhsw5drfg7y» и т. д.} – GrantU

1

Если, как сказал Ngenator, ваше поле не является объектом JSON, но строка, вам может понадобиться, чтобы загрузить его первым. Сначала зарегистрировать новый тег шаблона

from django import template 
    register = template.Library() 
    import json 

    @register.filter 
    def load_json(value): 
     return json.loads(value) 

Тогда, чтобы получить (просто) сумму в шаблоне

{% with transaction.response|load_json as jsondict %} 
    {% for k, v in jsondict.items %} 
     {% if k == "amount" %} 
      <td>{{ v }}</td> 
     {% endif %} 
    {% endfor %} 
    {% endwith %} 

Good Luck.

+0

Вы уверены, что не json, поскольку поле в db - JSONField()? – GrantU

+0

Это может зависеть от того, как вы передаете его из представлений в шаблон. Попробуйте зациклить транзакцию. Ответ в вашем шаблоне и посмотреть, что вы получаете. – SYK

+0

Я получаю список полей, но не значения – GrantU

Смежные вопросы