Django - 覆盖 ModelAdmin 中设置的 get_field 两次返回一个字段

标签 django django-admin

我想手动向管理字段集添加一个字段。

函数calcGeometryField返回我想添加到管理字段集中的字段。

但是,我在管理界面中添加了两次该字段。为什么?

class FeatureAdmin(admin.OSMGeoAdmin):
    fieldsets = [
        ('Info', {'fields':['shapefile', 'id_relat', 'attribute_value']})
    ]
    list_display = ['shapefile', 'id_relat']
    list_filter = ('shapefile', ('shapefile__created_by'))

    def get_fieldsets(self, request, obj=None):
        fieldsets = super(FeatureAdmin, self).get_fieldsets(request, obj)
        fieldsets[0][1]['fields'].insert(2, calcGeometryField(obj.shapefile.geom_type))
        return fieldsets

注意:该字段是来自 OSMGeoAdmin 的 map geodjango,但我使用 IntegerField 进行了测试,结果相同。

编辑:在更改模型实例时,似乎也混合了字段集。来自一个实例的字段出现在管理界面中的另一个实例中。

最佳答案

原始字段集 dict 是一个类级属性。通过插入您的字段,您正在修改类级别的字典,这会影响从它派生的所有实例。

您可能希望在插入之前对字段集进行深度复制:

import copy
...
fieldsets = copy.deepcopy(super(FeatureAdmin, self).get_fieldsets(request, obj))

关于Django - 覆盖 ModelAdmin 中设置的 get_field 两次返回一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454441/

相关文章:

django - 我尝试在CreateView中授予权限

Django 管理员搜索 : how to allow OR operator between search terms?

python - Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

django-admin - 如何使列表显示Django中的多对多效率更高

Django 可以将 tabularinline 字段拆分为多行吗?

python - 在 django-admin 中使用 django 将用户数据导出为 CSV

python - django @login_required 装饰器错误

django - 何时将 slugfield 存储在 django 数据库中?

python - Django hvad - 在模板中使用多语言对象的最佳实践

python - Django 管理面板无法向表中添加任何记录