如何在admin中排除django hstore字段?

时间:2015-03-03 21:44:50

标签: django django-admin hstore django-hstore

admin.py中的标准方法是通过定义类:

exclude = ('some_hstore_field', )

不起作用。

我设法通过指定显式fields获得预期结果,但希望排除我不需要的结果,而不是指定所需的所有结果。

1 个答案:

答案 0 :(得分:1)

假设您的模型hstore字段名为facilities

facilities = hstore.DictionaryField(schema=HSTORE_SCHEMA)

然后你不能只写:

exclude = ('some_non_hstore_field', 'facilities')

假设您的hstore架构看起来像这样:

HSTORE_SCHEMA = [
    {
        "name": "vegetarian_menu",
        "class": "BooleanField",
        "kwargs": {
            "default": False,
            "verbose_name": "vegetarian menu"
        }
    },
    {
        "name": "vegan_menu",
        "class": "BooleanField",
        "kwargs": {
            "default": False,
            "verbose_name": "vegan menu"
        }
    }
]

您必须按名称排除每个子字段,例如:

exclude = ('some_non_hstore_field', 'vegetarian_menu', 'vegan_menu')
你可以这样做:

exclude = tuple(['some_non_hstore_field'] + [field['name'] for field in HSTORE_SCHEMA])

或者像这样 - 使用类字段的元:

exclude = tuple(['some_non_hstore_field'] + [field['name'] for field in YourModel._meta.get_field_by_name('facilities')[0].schema])

同样适用于readonly_fields