Как исключить поле django hstore в админке?

Стандартный подход в admin.py определив класс:

exclude = ('some_hstore_field', )

не работает.

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

1 ответ

Предполагая, что в вашей модели hstore есть поле с именем facilities:

facilities = hstore.DictionaryField(schema=HSTORE_SCHEMA)

тогда вы не можете просто написать:

exclude = ('some_non_hstore_field', 'facilities')

Предполагая, что ваша схема hstore выглядит примерно так:

HSTORE_SCHEMA = [
    {
        "name": "vegetarian_menu",
        "class": "BooleanField",
        "kwargs": {
            "default": False,
            "verbose_name": "vegetarian menu"
        }
    },
    {
        "name": "vegan_menu",
        "class": "BooleanField",
        "kwargs": {
            "default": False,
            "verbose_name": "vegan menu"
        }
    }
]

Вы должны исключить каждое подполе по его имени, например:

exclude = ('some_non_hstore_field', 'vegetarian_menu', 'vegan_menu')

Вы можете сделать это так:

exclude = tuple(['some_non_hstore_field'] + [field['name'] for field in HSTORE_SCHEMA])

или как это - используя мета поля класса:

exclude = tuple(['some_non_hstore_field'] + [field['name'] for field in YourModel._meta.get_field_by_name('facilities')[0].schema])

То же самое относится и к readonly_fields

Другие вопросы по тегам