Django: Получить список образцовых полей?

Я определил a User класс, который (в конечном счете) наследовался models.Model. Я хочу получить список всех полей, определенных для этой модели. Например, phone_number = CharField(max_length=20). В основном я хочу получить что-либо, что наследовалось Field класс.

Я думал, что смогу получить их путем использования в своих интересах inspect.getmembers(model), но список, который это возвращает, не содержит ни одного из этих полей. Похоже, что Django уже овладел классом и добавил все его волшебные атрибуты и разделил, что было на самом деле определено. Так..., как я могу получить эти поля? У них, вероятно, есть функция для получения их в их собственных внутренних целях?

171
задан mpen 23 June 2010 в 23:29
поделиться

1 ответ

Django версии 1.8 и выше:

Вы должны использовать get_fields():

[f.name for f in MyModel._meta.get_fields()]

Метод get_all_field_names() является устаревшим, начиная с Django 1.8 и будет удален в 1.10.

На странице документации по ссылке выше приведена полностью обратно совместимая реализация get_all_field_names(), но для большинства целей предыдущий пример должен работать просто отлично.


Версии Django до 1.8:

model._meta.get_all_field_names()

Это должно сработать.

Для этого требуется реальный экземпляр модели. Если у вас есть только подкласс django.db.models.Model, то вы должны вызвать myproject.myapp.models.MyModel._meta.get_all_field_names()

279
ответ дан 23 November 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: