关于python:在Django ModelAdmin对象上使用任意方法或属性作为字段?

Using arbitrary methods or attributes as fields on Django ModelAdmin objects?

使用Django 1.1:

django管理文档描述了在list_display类属性中的modeladmin对象上使用任意方法或属性。这是在模型的列表显示中显示任意信息的一种很好的机制。但是,对于变更表单页面本身似乎没有类似的机制。完成这个有用的小功能的最简单方法是什么,以便在ModelAdmin更改表单页面上显示任意的、非字段派生的信息?

所需设置的具体示例:

1
2
3
4
5
6
7
8
9
10
11
class CustomUserAdmin(UserAdmin):
    def registration_key(self, obj):
       """Special method for looking up and returning the user's registration key
       """

        return 'the_key'

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
                    'registration_key')  # <- this works

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
              'registration_key')  # <- this DOESN'T work?

将该方法也添加到"readonly_fields"元组中。


尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CustomUserAdminForm(forms.ModelForm):
    registration_key = forms.IntegerField()                                

    class Meta:
        model = User  

class CustomUserAdmin(UserAdmin):
    def registration_key(self, obj):
       """Special method for looking up and returning the user's registration key
       """

        return 'the_key'

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
                    'registration_key')  # <- this works

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
              'registration_key')


我以前通过重写变更表单的模板并访问模型上的自定义方法来完成这项工作。使用fields要求管理员尝试为您的方法添加一个表单字段。