【问题标题】:how to exclude django hstore field in admin?如何在管理员中排除 django hstore 字段?
【发布时间】:2015-05-04 17:41:20
【问题描述】:

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

exclude = ('some_hstore_field', )

不工作。

我设法通过明确指定 fields 来获得预期结果,但我宁愿排除我不需要的那个,而不是指定所有其他需要的。

【问题讨论】:

    标签: django django-admin hstore django-hstore


    【解决方案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

    【讨论】: