Django - 在ModelAdmin中设置覆盖get_field会返回两次字段

时间:2014-03-17 12:36:15

标签: django django-admin

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

函数calcGeometryField返回我想要添加到admin字段集的字段。

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

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的地图geodjango,但我使用IntegerField测试了相同的结果。

编辑:在更改模型实例时,fielsets似乎也是混合的。实例中的字段显示在管理界面中的另一个实例中。

1 个答案:

答案 0 :(得分:13)

原始字段集dict是类级属性。通过插入您的字段,您可以修改类级别字典,该字典会影响从中派生的所有实例。

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

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