2016-07-07 2 views
2

Когда я использую hstore.DictionaryField() в модели Django, не передавая параметров и не регистрирую мою модель в Djano admin Я могу создать новые строки ключевого значения в интерфейсе администратора на лету.Как использовать Django HStore DictionaryField в режиме схемы и схемы в то же время?

Когда я использую то же поле в режиме схемы hstore.DictionaryField(schema=['some schema description']) Я получаю фиксированное количество полей, описанных в параметре schema.

Могу ли я иметь обе эти функции одновременно, а именно, иметь несколько фиксированных полей определенного типа, перечисленных в описании схемы, а также возможность добавлять новые поля?

Upd

Одним из способов решения этого можно с помощью два DictionaryField один со схемой и инобытия schemaless, но вряд ли является оптимальным решением.

ответ

0

Ответ отрицательный, вы не можете иметь оба варианта с текущей реализацией библиотеки hstore. Посмотрите на функции инициализации (это от их источника на GitHub):

class DictionaryField(HStoreField): 
    description = _("A python dictionary in a postgresql hstore field.") 

    def __init__(self, *args, **kwargs): 
     self.schema = kwargs.pop('schema', None) 
     self.schema_mode = False 
     # if schema parameter is supplied the behaviour is slightly different 
     if self.schema is not None: 
      self._validate_schema(self.schema) 
      self.schema_mode = True 
      # DictionaryField with schema is not editable via admin 
      kwargs['editable'] = False 
      # null defaults to True to facilitate migrations 
      kwargs['null'] = kwargs.get('null', True) 

     super(DictionaryField, self).__init__(*args, **kwargs) 

Вы можете видеть, что если схема установлена, то редактируемый аргумент для поля устанавливаются в ложь, которая является то, что Администратор Django проверяет, разрешено ли вам редактировать значение в пользовательском интерфейсе администратора.

К сожалению, у вас есть только несколько вариантов: переопределите его сами, создав собственный класс, который наследуется от него, или откройте запрос на перенос или проблему на своей странице github и надейтесь, что кто-то доберется до него.

+0

Ну, hstore уже выглядел слишком мощным. Спасибо за уведомление. –

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

  • Нет связанных вопросов^_^