3

当我hstore.DictionaryField()在 Django 模型中使用不传递参数并在 Djano admin 中注册我的模型时,我可以在管理界面中即时创建新的键值行。

当我在模式模式下使用相同的字段时,hstore.DictionaryField(schema=['some schema description'])我会得到参数中描述的固定数量的字段schema

我可以同时拥有这两个功能,即在架构描述中列出几个特定类型的固定字段,同时还可以添加新字段吗?

更新

解决此问题的一种方法是使用两个DictionaryField,一个带有模式,另一个没有模式,但这并不是最佳解决方案。

4

1 回答 1

1

答案是否定的,你不能同时拥有 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)

您可以看到,如果设置了架构,则该字段的可编辑参数设置为 false,这是 Django 管理员查看是否应该允许您在管理 UI 中编辑值的内容。

不幸的是,您只有几个选择:通过创建您自己的继承自该类的类来覆盖它,或者在他们的 github 页面上打开一个拉取请求或问题,并希望有人能找到它。

于 2016-07-28T17:58:44.497 回答