如何同时在模式和无模式模式下使用Django HStore DictionaryField?

How to use Django HStore DictionaryField in schema and schemaless mode at the same time?

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

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

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

更新

解决这个问题的一种方法是使用 two DictionaryField 的一个有模式,另一个是无模式的,但这不是最佳解决方案。

答案是否定的,您不能同时使用 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。

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