2015-03-03 2 views
1

Стандартный подход в admin.py путем определения класса:Как исключить поле django hstore в admin?

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

Смежные вопросы