Итерация по модельным полям - Django - PullRequest
13 голосов
/ 01 июля 2010

Я пытаюсь перебирать поля, как они записаны в моей модели :

В настоящее время я использую это:

def attrs(self):
  for attr, value in self.__dict__.iteritems():
    yield attr, value

но порядок кажется в значительной степени случайным : (


Есть идеи?

1 Ответ

22 голосов
/ 01 июля 2010

Атрибут _meta в классах и экземплярах Model - это django.db.models.options.Options, который предоставляет доступ ко всей полезной информации о Model, о котором идет речь.

Для полей он даст вамих в том порядке, в котором они были созданы (то есть в том же порядке, в котором они были объявлены).

def attrs(self):
    for field in self._meta.fields:
        yield field.name, getattr(self, field.name)
...