Django 2.1.7 form处理select下拉菜单

2024-08-21 04:08

本文主要是介绍Django 2.1.7 form处理select下拉菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

在开发的过程,会有很多form表单需要select下拉菜单的枚举类设置,如果一个个在前端中写死是很不合理的。应该要在models数据模型设置的时候就直接配置好,然后前端直接读取枚举数据,然后在前端通过模板直接读取,或者json返回。
下面来写一个示例来看看。

参考文献

https://docs.djangoproject.com/zh-hans/2.1/topics/forms/formsets/

示例

1)创建数据模型类以及form表单设置

from django.db import models
from django import formsclass FormTestForm(forms.Form):"""FormTest数据模型的form表单字段"""# 任务类型的下拉数据task_type_choices = ((0, '常规任务'),(1, '线上业务日常轮询'),(2, '全链路任务'),)# 设置form表单的必填项task_type = forms.ChoiceField(label='任务类型:', widget=forms.Select(), choices=task_type_choices,initial=task_type_choices[0])comment = forms.CharField(label='备注',max_length=30)class FormTest(models.Model):"""FormTest数据模型类"""# 任务类型的下拉数据task_type = models.SmallIntegerField(default=0, choices=FormTestForm.task_type_choices, verbose_name='任务类型')comment = models.CharField(max_length=30, verbose_name='备注信息')class Meta:db_table = 'dp_form_test'verbose_name = 'form表单测试'verbose_name_plural = verbose_nameordering = ['id'] # 排序字段

2)执行数据迁移

python3 manage.py makemigrations
python3 manage.py migrate

查看生成的数据表:

mysql> desc dp_form_test;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| task_type | smallint(6) | NO   |     | NULL    |                |
| comment   | varchar(30) | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)mysql> 

3)编写一个视图来处理form表单

from .models import FormTest,FormTestForm# ex:/assetinfo/form_test
class FormTestView(View):def get(self,request):form_test_form =  FormTestForm() # 创建form类context = {'form_test_form': form_test_form,}return render(request,'form_test/form_test.html',context=context)def post(self,request):form_test_form = FormTestForm(request.POST)  # 创建form类,接收POST请求参数,用于数据校验if form_test_form.is_valid(): # 判断表单数据是否正确task_type = request.POST.get('task_type','')comment = request.POST.get('comment','')# 将数据写入数据库FormTest.objects.create(task_type=task_type,comment=comment,)return HttpResponse("task_type = %s, comment = %s" % (task_type, comment))else: # 表单验证未通过,直接返回错误task_type = request.POST.get('taskTypeSelect', '')errors = form_test_form.errors # 打印错误信息return HttpResponse("error, task_type = %s, errors = %s" % (task_type, errors))

4)配置url

urlpatterns = [# ex:/assetinfo/form_testpath('form_test', FormTestView.as_view(), name='form_test'),
]

5)编写一个form表单的html简单页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form method="post">{% csrf_token %}{#  设置的name必须与form表单中设置的一致,不然form无法获取,导致is_vaild判断没有必填项,导致错误 #}<select class="form-control" id="taskTypeSelect" name="task_type"><option selected="" name="taskTypeSelect">选择任务类型</option>{% for key,value in form_test_form.task_type_choices %}<option value="{{ key }}" name="task_type">{{ value }}</option>{% endfor %}</select><input type="text" name="comment" id="commemt"><button type="submit" >提交</button></form>
</body>
</html>

注意:设置的name必须与form表单中设置的一致,不然form无法获取,导致is_vaild判断没有必填项,导致错误

6)启动服务,测试正常请求

13423234-e79167b96aa63e9d.png

请求成功,则返回浏览器请求的值。

13423234-44fac012a55df23e.png

多次请求之后,查看mysql存储的值是否正确,如下:

mysql> select * from dp_form_test;
+----+-----------+---------+
| id | task_type | comment |
+----+-----------+---------+
|  1 |         0 | 备注    |
|  2 |         0 | 备注    |
|  3 |         1 | 备注3   |
+----+-----------+---------+
3 rows in set (0.00 sec)mysql> 

请求成功,以及保存数据成功!!

7)测试错误请求

13423234-bde67cd5ad127445.png

不填写任务数据,直接请求,则报错如下:

13423234-326476625f4bff5e.png

可以看到,通过form_test_form.errors参数,可以获取打印相关的错误信息。当然,也可以自定义错误信息。

13423234-0e3934319aa622f6.png

这篇关于Django 2.1.7 form处理select下拉菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092074

相关文章

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁