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

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ