Джанго - как получить все поля из модели - PullRequest
1 голос
/ 13 декабря 2010

Существует ли простой способ получить все поля из определенной модели django, даже те, которые установлены с помощью поля Foreignkey или поля многие ко многим в другом отношении ?

Пример:

class A(models.Model):
    some_number = models.IntegerField()

class B(models.Model):
    link_to_a = models.ForeignKey(A, related_name="link_to_b")

Вызов метода для A вернет id, some_number, link_to_b.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

Вы можете использовать полу-документированный непубличный API в свойстве _meta класса модели:

from myapp.models import A

for f in A._meta._fields():
    print f.name

(Обратите внимание, что в Django существует задание для документирования этогоAPI: http://code.djangoproject.com/ticket/12663)

Вам нужно будет вручную следить за отношениями и указывать имена их полей.

Поля отношений будут иметь свойство rel:

from myapp.models import A

for f in A._meta._fields():
    print f.name

    if hasattr(f, 'rel'):
        print "Grab more fields from " + rel.to.name
        g in rel.to._meta._fields():
            print g.name
0 голосов
/ 13 декабря 2010

Просмотрите очень недокументированные поля A._meta.fields:

foreignkeys = [f для f в A._meta.fields, если f.attname.endswith ('_ id')]]

В полях есть много интересных методов, которые вы должны обнаружить, используя dir () или читая источник ...

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