Модель Django итерирует поля - PullRequest
5 голосов
/ 23 августа 2010

как я могу перебрать и получить все поля модели django?

Я знаю, что foo.item._meta.get_all_field_names() приносит мне все имена полей. Как я могу получить доступ к этим полям (включая их фактические значения) в экземпляре модели? (За исключением обычной записи foo.fieldname).

Мне это нужно для того, чтобы создать собственный вывод для моей модели, включая ее многочисленные отношения. Есть идеи?

Ответы [ 2 ]

8 голосов
/ 23 августа 2010

Как насчет:

getattr(foo.__class__, <field_name>)

Это должно дать вам объект поля, а не значение в данном экземпляре модели.Если вы хотите, чтобы значение поля в заданном страховом поле модели было названо так:

getattr(foo, <field_name>)
2 голосов
/ 23 августа 2010

Это выглядит ужасно, но это будет работать:

for each in model_instance._meta.fields: 
    print each.value_from_object(model_instance)

Тем не менее, у меня есть еще одно предложение. Учитывая, что ваше требование

для создания пользовательского вывода для моей модели, включая ее многочисленные отношения.

как насчет сериализации экземпляра в подходящий формат (XML / JSON) и последующей работы над этим? это позволяет избежать зависимости от _meta или любых внутренних методов (которые могут измениться).

...