Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在模式和无模式模式下同时使用Django HStore DictionaryField?_Python_Django_Django Models_Django Admin_Django Hstore - Fatal编程技术网

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

Python 如何在模式和无模式模式下同时使用Django HStore DictionaryField?,python,django,django-models,django-admin,django-hstore,Python,Django,Django Models,Django Admin,Django Hstore,当我在Django模型中使用hstore.DictionaryField()而不传递任何参数并在Djano admin中注册我的模型时,我可以在admin界面中动态创建新的键值行 当我在模式模式hstore.DictionaryField(模式=['some schema description'])中使用相同的字段时,我得到了模式参数中描述的固定数量的字段 我是否可以同时拥有这两个特性,即在模式描述中列出若干特定类型的固定字段,同时还可以添加新字段 Upd 解决这一问题的一种方法是使用两个词典

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

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

我是否可以同时拥有这两个特性,即在模式描述中列出若干特定类型的固定字段,同时还可以添加新字段

Upd


解决这一问题的一种方法是使用两个词典,一个是带模式的,另一个是无模式的,但这并不是一个最佳解决方案。

答案是否定的,在当前的hstore库实现中,您不能同时拥有这两个词典。看看init函数(这是他们在github上的源代码):

您可以看到,如果设置了模式,那么字段的可编辑参数将设置为false,这就是Django管理员查看的内容,以确定是否应该允许您编辑管理UI中的值

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

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)