Как исключить поле 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