Как я могу получить список полей из заданной модели, но исключить поля из абстрактной модели?
Документы на .get_fields
говорятследующее:
include_parents По умолчанию True. Рекурсивно включает в себя поля, определенные в родительских классах. Если установлено значение False, get_fields () будет искать только поля, объявленные непосредственно в текущей модели. Поля из моделей, которые непосредственно наследуются от абстрактных моделей или прокси-классов, считаются локальными, а не родительскими.
Это здорово, за исключением того, что мне нужно исключить также поля прокси / абстрактной модели.
Например:
class AbstractModel(models.Model):
some_abstract_field = models.IntegerField()
class Meta:
abstract = True
class SomeModel(AbstractModel):
some_field = models.IntegerField()
Как получить список полей для SomeModel
, но исключить поля из AbstractModel
?
Единственные решения, которые я могу придуматьиз:
подкласса метакласса ModelBase
для моих моделей, чтобы включить различие между абстрактными моделями и дочерними моделями
Это звучит как кошмар по множеству причин. ..
исправление обезьян мои абстрактные модели для включения свойства, которое возвращает список имен полей
Я, скорее всего, в конечном итоге опубликую ответиспользуя этот маршрут, но наверняка есть более pythonic способ сделать это.