Вы можете использовать метод db.Model 'dynamic_properties' для извлечения свойств Expando в том же формате, что и метод 'properties' (как описано в классе Model )
Помните, что эти функции не возвращают значение свойства, хотя ... 'properties' возвращает словарь имен свойств, сопоставленных с их классом реализации (в данном случае db.ReferenceProperty и db.DateTimeProperty), и 'dynamic_properties 'просто возвращает список имен свойств, поскольку Expandos не может сопоставить динамическое значение с классом реализации.
Чтобы получить значение свойства, вы должны использовать getattr(model, prop_name)
. Невозможно запустить эту функцию исключительно внутри шаблона Django (без библиотеки пользовательских тегов ), но вы можете сохранить и переписать свой метод следующим образом ...
def getExpandoValues(self):
return dict((name, getattr(self, name)) for name, impl_class in self.dynamic_properties())
... и переписать свой шаблон для доступа к значениям с помощью нового словарного ввода:
{% for event in platform.event_set %}
<b>{{ event.date }}</b><br />
{% for pair in event.getExpandoValues %}
{{ pair.0 }} = {{ pair.1 }}<br />
{% endfor %}
{% endfor %}