Python 如何在模式和无模式模式下同时使用Django HStore DictionaryField?
当我在Django模型中使用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 解决这一问题的一种方法是使用两个词典
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)