Как отфильтровать ".get_fields ()", чтобы исключить прокси-модели в Django? - PullRequest
0 голосов
/ 04 октября 2019

Как я могу получить список полей из заданной модели, но исключить поля из абстрактной модели?

Документы на .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?

Единственные решения, которые я могу придуматьиз:

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

    Это звучит как кошмар по множеству причин. ..

  2. исправление обезьян мои абстрактные модели для включения свойства, которое возвращает список имен полей

    Я, скорее всего, в конечном итоге опубликую ответиспользуя этот маршрут, но наверняка есть более pythonic способ сделать это.

...