在Django ModelAdmin对象中使用任意方法或属性作为字段?
使用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'这个元组里。