【问题标题】:Django - overiding get_fieldset in ModelAdmin returns a field twiceDjango - 在 ModelAdmin 中覆盖 get_fieldset 两次返回一个字段
【发布时间】:2014-03-17 12:36:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2022-11-02
      • 2021-06-08
      • 2015-01-12
      • 2013-08-27
      • 2014-02-02
      • 1970-01-01
      • 2011-06-18
      • 2012-05-08
      相关资源
      最近更新 更多