django admin如何在只读字段上显示小部件

django

1个回答

写回答

13272170528

2025-06-19 12:05

+ 关注

Django
Django

使用Django Admin管理后台是一个方便快捷的方式,可以帮助我们管理数据库中的数据。在Django Admin中,有时我们想在只读字段上显示小部件,以提供更好的用户体验。本文将介绍如何在只读字段上显示小部件,并通过一个案例代码来说明。

Django Admin中,我们可以通过自定义ModelAdmin类来实现在只读字段上显示小部件的功能。首先,我们需要创建一个自定义的ModelAdmin类,并在其中重写get_readonly_fields方法。这个方法返回一个只读字段的列表。然后,我们可以通过formfield_for_dbfield方法来为只读字段设置小部件。

以下是一个案例代码,将帮助我们更好地理解如何实现这个功能:

Python

from Django.contrib import admin

from Django import forms

from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):

readonly_fields = ('read_only_field',)

def get_readonly_fields(self, request, obj=None):

if obj:

return self.readonly_fields + ('another_read_only_field',)

return self.readonly_fields

def formfield_for_dbfield(self, db_field, <strong>kwargs):

if db_field.name == 'read_only_field':

kwargs['widget'] = forms.TextInput(attrs={'readonly': 'readonly'})

return super().formfield_for_dbfield(db_field, </strong>kwargs)

admin.site.register(MyModel, MyModelAdmin)

在上面的代码中,我们首先定义了一个MyModelAdmin类,继承自admin.ModelAdmin。然后,我们将read_only_field字段设置为只读字段,并通过readonly_fields属性将其添加到只读字段列表中。

接下来,我们重写了get_readonly_fields方法。在这个方法中,我们根据对象是否存在来动态添加另一个只读字段another_read_only_field。这样,当我们编辑一个已经存在的对象时,这个字段也将变为只读。

最后,我们重写了formfield_for_dbfield方法。在这个方法中,我们判断字段名是否为read_only_field,如果是,就给它设置一个只读的文本输入框小部件。

通过以上的代码,我们可以在只读字段上显示一个只读的文本输入框小部件,从而提供更好的用户体验。

示例代码

Python

from Django.contrib import admin

from Django import forms

from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):

readonly_fields = ('read_only_field',)

def get_readonly_fields(self, request, obj=None):

if obj:

return self.readonly_fields + ('another_read_only_field',)

return self.readonly_fields

def formfield_for_dbfield(self, db_field, <strong>kwargs):

if db_field.name == 'read_only_field':

kwargs['widget'] = forms.TextInput(attrs={'readonly': 'readonly'})

return super().formfield_for_dbfield(db_field, </strong>kwargs)

admin.site.register(MyModel, MyModelAdmin)

通过以上的代码,我们可以在只读字段上显示一个只读的文本输入框小部件,从而提供更好的用户体验。

在本文中,我们介绍了如何在Django Admin中显示只读字段的小部件。通过自定义ModelAdmin类,重写get_readonly_fields方法和formfield_for_dbfield方法,我们可以实现这个功能。希望本文对你在使用Django Admin管理后台时有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号