python测试开发django-107.form组件widgets(radio/checkbox/下拉框)

前言

form 组件widgets可以生成页面上常见的控件:radio/checkbox/单选多选下拉框/日历控件等

生成页面上控件

models.py设计模型

from django.db import models # Create your models here. class Detail(models.Model): user = models.CharField(max_length=30, blank=True, null=True) age = models.IntegerField(blank=True, null=True) email = models.EmailField(blank=True, null=True) city = models.CharField(max_length=30, blank=True, null=True) GENDER_CHOICES = ( ('男', '男'), ('女', '女'), ) gender = models.CharField( max_length=30, choices=GENDER_CHOICES ) fancy = models.CharField(max_length=30, blank=True, null=True) comment = models.TextField() birth = models.DateTimeField()

DetailFrom 类

# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ from django.forms import widgets from .models import Detail from django.views import View from django import forms from django.shortcuts import render class DetailFrom(forms.Form): user = forms.CharField( label="姓名", required=False, max_length=12, min_length=3, error_messages={"required": '不能为空'}, ) age = forms.IntegerField(label="年龄", max_value=200, min_value=0) gender = forms.CharField( label="性别", widget=widgets.RadioSelect( choices=[ ('男', '男'), ('女', '女') ] ), # Radio 单选 initial='男' ) email = forms.EmailField(label="邮箱",) city = forms.CharField( label="城市", widget=widgets.Select(choices=[ ("北京", "北京"), ("上海", "上海"), ("深圳", "深圳"), ("杭州", "杭州"), ]), initial="上海" ) birth = forms.DateTimeField(label="出生年月", widget=forms.DateInput(attrs={'type': 'date', 'value': '2021-01-01'})) comment = forms.CharField(label="评论", widget=forms.Textarea) # 单选 checkbox xx = forms.CharField( label="是否勾选", widget=widgets.CheckboxInput(), ) # 多选 checkbox fancy = forms.MultipleChoiceField(label="爱好", initial=[2, ], choices=((1, 'Python'), (2, 'Selenium'), (3, "Appium")), widget=widgets.CheckboxSelectMultiple ) # 多选下拉框 fancy2 = forms.MultipleChoiceField(label="爱好2", initial=[2, ], choices=((1, 'Python'), (2, 'Selenium'), (3, "Appium")) )

views.py视图

# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ class DetailView(View): def get(self, request): form_obj = DetailFrom() return render(request, "detail.html", locals()) def post(self, request): form_obj = DetailFrom(request.POST) if form_obj.is_valid(): data = form_obj.cleaned_data() ... msg = "保存成功" return render(request, "detail.html", locals()) else: # 全局钩子自定义错误提示获取 print(form_obj.errors.get('__all__')[0]) error_msg = form_obj.errors.get('__all__')[0] return render(request, "detail.html", locals())

模板

detail.html模板

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>详情页面</title> <style> ul li{ list-style: none; } </style> </head> <body> <form action="" method="POST" id="detail-form" > {% csrf_token %} {% for field in form_obj %} {% if field.label == "性别" %} {{ field.label_tag }} {{ field.0 }} {{ field.1 }} {% elif field.label == "爱好" %} {{ field.label_tag }} {% for f in field %} {{ f }} {% endfor %} {% else %} <p> {{ field.label_tag }} {{ field }} {{ field.errors }} </p> {% endif %} {% endfor %} <p> {% if msg %} {{ msg }} {% endif %} </p> <p> <input type="submit" value="提交" > </p> </form> </body> </html>

页面生成效果

(0)

相关推荐

  • Django的开发流程与数据库设计

    引言:项目开发流程: 需求分析(成员:架构师 .产品经理 .开发者组长) 在跟客户谈需求之前,会大致先了解客户的需求,然后自己先设计一套比较好写的方案.跟客户沟通交流中引导客户往我们之前想好的方案上面 ...

  • DjangoRestFramework使用

    目录: 1.1 DjangoRestFramework基本使用 1.2 drf认证&权限 模块 1.3 djangorestframework 序列化 1.4 djangorestframew ...

  • 11 Serializer组件

    知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 为什么要使用序列化组件? 视图中查询到的对象和queryset类型不 ...

  • django orm 常用查询筛选

    django orm 常用查询筛选 本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不 ...

  • python测试开发django -142.Bootstrap 表单(form)

    前言 HTML 表单用于收集不同类型的用户输入.boostrap中表单有几种样式 基本垂直表单 内联表单 form-inline 水平排列表单 form-horizontal 基本表单实例 单独的表单 ...

  • python测试开发django-137.Bootstrap 输入框组件input-group

    前言 在页面上看到的这种输入框控件可以用Bootstrap 输入框组件input-group来实现 input-group 输入框组 输入框组扩展自 表单控件,通过向输入域添加前缀和后缀的内容,可以向 ...

  • python测试开发django -140.Bootstrap 缩略图

    前言 网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 class .thumbnail 的& ...

  • python测试开发django -143.Bootstrap 表单控件校验状态

    前言 Bootstrap 对表单控件的校验状态,如 error.warning 和 success 状态,都定义了样式.使用时,添加 .has-warning..has-error 或 .has-su ...

  • python测试开发django -141.Bootstrap 面板(Panels)

    # 前言 面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 元素添加 class .panel 和 class .panel-default 即可 基础面板 不带标题的基本面 ...

  • python测试开发django -144.Ace Editor 在线编辑python代码

    前言 网页上想在线编辑代码,可以使用Ace Editor 在线编辑实现.比如我们想实现一个功能,在网页版上写python代码,能有python的语法自动补齐功能. Ace Editor 在线编辑 AC ...

  • python测试开发django-108.form组件Select下拉框读取数据库内容

    前言 select下拉框选项经常会需要从数据库动态拿数据,每次刷新页面能拿到最新的数据. Teacher 模型 Teacher 表 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 ...

  • python测试开发django-10.django连接mysql

    前言 Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle.本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连 ...

  • python测试开发django-73.django视图 CBV 和 FBV

    前言 FBV(function base views) 就是在视图里使用函数处理请求,这一般是学django入门的时候开始使用的方式. CBV(class base views) 就是在视图里使用类处 ...