Django Admin 自定义模型表单提交及验证教程
184 浏览量
更新于2024-08-31
收藏 64KB PDF 举报
"这篇文章主要介绍了如何在Django的admin后台中自定义模型(Model)的表单提交,以便实现特定的功能,例如对提交的密码进行加密处理和验证电话号码是否全为数字。"
在Django中,admin界面是用于管理模型数据的一个强大工具。默认情况下,Django会自动为每个模型生成表单,但有时我们需要根据项目需求自定义这些表单,例如增加验证规则或改变数据处理方式。以下是如何自定义Django admin model表单提交的步骤:
首先,在`admin.py`文件中,我们需要创建一个自定义的管理类(Admin Class),这个类会继承自`django.contrib.admin.ModelAdmin`。例如:
```python
from django.contrib import admin
class CourseAdmin(admin.ModelAdmin):
# 在这里添加自定义代码
```
在`CourseAdmin`类中,我们可以覆盖或添加方法来实现自定义功能。例如,如果我们要在保存表单前对密码字段进行加密,可以重写`save_model`方法:
```python
def save_model(self, request, obj, form, change):
# 对密码进行加密处理
obj.password = encrypt_password(form.cleaned_data['password'])
super().save_model(request, obj, form, change)
```
在这里,`encrypt_password`是一个假设存在的函数,负责将未加密的密码转换为安全的加密格式。
另外,为了验证电话号码是否全为数字,我们可以自定义表单类并将其设置为模型的`form`属性:
```python
from django import forms
class CustomCourseForm(forms.ModelForm):
class Meta:
model = Course
fields = '__all__'
def clean_phone_number(self):
phone_number = self.cleaned_data['phone_number']
if not phone_number.isdigit():
raise forms.ValidationError('电话号码必须为数字')
return phone_number
# 在CourseAdmin中使用自定义表单
CourseAdmin.form = CustomCourseForm
```
在`clean_phone_number`方法中,我们检查了`phone_number`字段,确保它只包含数字。如果不符合条件,就会抛出一个验证错误。
此外,Django admin的`ModelAdmin`类还提供了`get_urls`方法,用于自定义admin的URL模式。通过覆盖这个方法,我们可以添加额外的视图或改变默认行为。例如:
```python
def get_urls(self):
urls = super().get_urls()
custom_urls = [
url(r'^custom_action/$', self.custom_action_view, name='custom_action'),
]
return custom_urls + urls
def custom_action_view(self, request, *args, kwargs):
# 实现自定义操作逻辑
pass
```
在这个例子中,我们添加了一个新的URL模式`/custom_action/`,并定义了一个对应的视图`custom_action_view`。
通过以上方法,我们可以在Django admin中实现自定义的模型表单提交,包括数据处理、验证规则以及自定义的URL和视图。这样,我们不仅能增强admin的功能,还能更好地适应项目的特定需求。
2020-12-25 上传
2020-12-20 上传
2021-01-21 上传
点击了解资源详情
2020-09-21 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38555350
- 粉丝: 2
- 资源: 931
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程