55. Django 2.1.7 form处理select下拉菜单

网友投稿 962 2022-11-21

55. Django 2.1.7 form处理select下拉菜单

55. Django 2.1.7 form处理select下拉菜单

需求

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

参考文献

​​django.db import modelsfrom 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_name ordering = ['id'] # 排序字段

2)执行数据迁移

python3 manage.py makemigrationspython3 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_testclass 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_test path('form_test', FormTestView.as_view(), name='form_test'),]

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

Title

{% csrf_token %} {# 设置的name必须与form表单中设置的一致,不然form无法获取,导致is_vaild判断没有必填项,导致错误 #}

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

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

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

多次请求之后,查看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)测试错误请求

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Maven 项目名规范
下一篇:SpringBoot设置编码UTF
相关文章

 发表评论

暂时没有评论,来抢沙发吧~