当我在Django模型中使用hstore.DictionaryField()
传递没有参数并在Djano admin中注册我的模型时,我可以在管理界面中动态创建新的键值行。
当我在架构模式hstore.DictionaryField(schema=['some schema description'])
中使用相同的字段时,我会获得schema
参数中描述的固定数量的字段。
我是否可以同时拥有这两个功能,即在架构描述中列出某些类型的固定字段,同时还能添加新字段?
UPD
解决这个问题的一种方法可能是使用两个 DictionaryField,其中一个是模式,另一个是无模式的,但它不是最佳解决方案。
答案 0 :(得分:0)
答案是否定的,你不能同时拥有hstore库的当前实现。看看init函数(这是来自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)
您可以看到,如果设置了架构,那么该字段的editable参数将设置为false,这是Django管理员查看是否应该允许您在管理UI中编辑值的内容。
不幸的是,你只有几个选项:通过创建自己继承自那个的类来自己覆盖它,或者在github页面上打开一个pull请求或问题,并希望有人能够访问它。