如何在Django ModelAdmin字段集中调用模型方法?

2024-04-27 17:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

当数据库中已经存在数据时,我想在管理窗体上显示嵌入的映射。我有以下代码:

模型.py

class Address(models.Model):
    address = models.CharField()

    def address_2_html(self):
        if self.address:
            # Return html for an embedded map using the entered address.
            return embedded_map_html
        else:
            return ''
    address_2_html.allow_tags = True

管理.py

class AddressAdmin(admin.ModelAdmin):
    fieldsets = [(label, {'fields': ['address','address_2_html']}),]

这不管用。我得到一个错误:

'AddressAdmin.fieldsets[1][1]['fields']' refers to field 'address_2_html' that is missing from the form.

我尝试的另一件事是对“fieldsets”使用“description”选项,但是,“address_2_html”在AddressAdmin的范围内不可访问。我确实成功地嵌入了一个使用“description”的静态地图,这很酷,但不够酷。


Tags: thepyself数据库mapfieldsreturnaddress
2条回答

像那样(从记忆中):

class AddressAdmin(admin.ModelAdmin):
    fieldsets = [(label, {'fields': ['address','address_2_html']}),]
    readonly_fields = ['address_2_html']

    def address_2_html(self, obj):
        return obj.address_2_html()
    address_2_html.allow_tags = True
    address_2_html.short_description = 'Address display'

由于get_fieldsets()方法允许访问模型对象地址,因此通过重写get_fieldsets()解决了此问题。

def get_fieldsets(self, request, obj=None):
    fs = [
        (self.label,  {'fields': ['address',]}),
        ('Map', {'fields': [], # required by django admin
                'description':obj.address_2_html(),
         }),
    ]
    return fs

相关问题 更多 >