在Django ModelAdmin对象中使用任意方法或属性作为字段?

14 投票
3 回答
8730 浏览
提问于 2025-04-16 03:16

使用Django 1.1:

Django的管理文档中提到,可以在ModelAdmin对象的list_display属性中使用任意的方法或属性。这是一个很好的机制,可以在模型的列表展示中显示任意信息。不过,似乎在更改表单页面上没有类似的机制。有没有简单的方法可以在ModelAdmin的更改表单页面上显示一些不来自字段的信息?

下面是一个具体的例子:

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?

3 个回答

1

我之前是通过修改更改表单的模板来实现这个的,并且访问模型上的自定义方法。使用 fields 是在让管理员尝试为你的方法添加一个表单字段。

5

试试下面这个:

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')
31

把这个方法也加到'readonly_fields'这个元组里。

撰写回答