首先需要明确一点,Django的admin后台界面是通过ModelAdmin来实现的。因此,要在修改/添加表单界面显示额外字段,需要对应的ModelAdmin中添加相应的代码。具体步骤如下:
- 定义和注册ModelAdmin类
首先需要定义和注册一个ModelAdmin类,例如:
from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
pass
admin.site.register(MyModel, MyModelAdmin)
- 自定义表单
在ModelAdmin中,可以通过fields或fieldsets属性来自定义表单的字段和布局,例如:
class MyModelAdmin(admin.ModelAdmin):
fields = ('field1', 'field2', 'extra_field')
admin.site.register(MyModel, MyModelAdmin)
这样,表单中就会显示extra_field
这个额外字段。
- 定义表单控件类型
如果需要显示的额外字段不是Model中的常规字段,而是需要自定义表单控件类型,可以引入Django的Form组件进行实现。例如:
from django import forms
class MyModelForm(forms.ModelForm):
extra_field = forms.CharField()
class Meta:
model = MyModel
fields = '__all__'
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
fields = ('field1', 'field2', 'extra_field')
admin.site.register(MyModel, MyModelAdmin)
这样,表单中的extra_field
就变成了CharField类型。
示例:
假设我们有一个MyModel模型,其中有三个字段:name
、age
和email
。现在我们要在修改/添加界面增加一个photo
字段,用于上传用户头像。并且需要使用自定义的Widget实现,这一过程如下:
- 定义新的Widget
首先我们需要定义一个新的Widget,用于生成前端的页面元素。
from django.forms.widgets import FileInput
class ImageWidget(FileInput):
template_name = 'widgets/image_widget.html'
class Media:
css = {
'all': ('css/custom_image_widget.css',),
}
js = ('js/custom_image_widget.js',)
这里我们继承了Django原生的FileInput控件,并指定了自定义的页面模板和CSS/JS文件。
- 定义新的表单Field
接着我们需要定义一个新的表单Field,用于在后台中展示和处理这个额外字段。
from django.forms import CharField
from .widgets import ImageWidget
class ImageField(CharField):
widget = ImageWidget
这里我们继承了Django原生的CharField控件,并将widget属性指定为我们自定义的ImageWidget控件。
- 定义新的表单类型
接下来我们需要定义一个新的表单类型,在其中加入我们的自定义Field。
from django.forms import ModelForm
from .fields import ImageField
from .models import MyModel
class MyModelForm(ModelForm):
photo = ImageField(required=False, label="Photo")
class Meta:
model = MyModel
fields = '__all__'
这里我们继承了Django原生的ModelForm组件,并将其中包含的Field修改为我们自定义的ImageField。
- 定义新的ModelAdmin
最后我们需要定义一下新的ModelAdmin,用于注册我们刚才定义的Form和Field。这里我们同样需要引入前面的所有代码,因此可以写成如下的形式:
from django.contrib import admin
from .fields import ImageField
from .forms import MyModelForm
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
fields = ('name', 'age', 'email', 'photo')
admin.site.register(MyModel, MyModelAdmin)
这里我们仅需要关注定义的Model字段,将其中增加一个photo字段。
以上就是添加额外字段的完整攻略。需要注意的是,以上流程仅适用于修改、添加数据页面的额外字段。如果需要在展示页面中增加额外字段,需要单独处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django admin.py 在修改/添加表单界面显示额外字段的方法 - Python技术站