zoukankan      html  css  js  c++  java
  • Django ---Form的字段、选择下拉框 adiocheckbox

    Django Form组件
    1 验证
    2 生成HTML(保留上次输入内容)
    3 初始化默认值

    FORM重点
    -字段
      ChoiceField 单选框
      MultipleChoiceField 多选框
      CharField
      IntegerField
      DecimalField 小数  
      DateField
      DateTimeField
      EmailField
      GenericIPAddressField IP

      RegexField 自定义正则

     -HTML插件

      通过attrs(class="jj") 给字段添加属性

    自定义字段时的views文件

    from django.shortcuts import render
    
    from django import forms
    from django.forms import fields
    from django.forms import widgets
    
    class TestForm(forms.Form):
        user = fields.CharField(
            required=False,
            max_length=12,
            min_length=3,
            error_messages={"required":'不能为空'},
    
    
                )
        age = fields.IntegerField()
        email = fields.EmailField()
    
        city =fields.ChoiceField(
            choices=[(1,"北京"),(2,"上海"),(3,"广州"),], #单选下拉框
            initial=2
        )
    
        gender =fields.CharField(
            widget=widgets.Select(choices=[(1,""),(2,""),]),     #单选下拉框  选男不选女
            initial=2
        )
    
        hobby=fields.CharField(
            widget=widgets.RadioSelect(choices=[(1,""),(2,""),]),   #单选radio
            initial = 2,
        )
    
        province=fields.MultipleChoiceField(
            choices=[(1,'安徽'),(2,'江苏'),(3,'广东')],    #d多选下拉框
            initial=[1,2]
        )
    
        cc=fields.CharField(
            widget=widgets.CheckboxInput(),    #单选checkbox
        )
    
        dd=fields.MultipleChoiceField(    #多选 checkbox
            initial=[2,],
            choices=((1,'a'),(2,'b'),(3,"c")),
            widget=widgets.CheckboxSelectMultiple
        )
    
    def test(request):
        if request.method == "GET":
            obj=TestForm()
            render(request,'test.html',{"obj":obj})
    
        if request.method == 'POST':
            obj =TestForm(request.POST)
    
        return render(request,'test.html',{'obj':obj})

    对应的HTML文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post" novalidate>
        {% csrf_token %}
        <p>{{ obj.user.label }}   {{ obj.user }}</p>
        <p>{{ obj.age.label }}   {{ obj.age }}</p>
        <p>{{ obj.email.label }}   {{ obj.email }}</p>
        <p>{{ obj.city.label }}   {{ obj.city }}</p>
        <p>{{ obj.gender.label }}   {{ obj.gender }}</p>
        <p>{{ obj.hobby.label }}   {{ obj.hobby.0 }}{{ obj.hobby.1 }}</p>
        <p>{{ obj.province.label }}   {{ obj.province }}</p>
        <p>{{ obj.cc.label }}   {{ obj.cc }}</p>
        <p>{{ obj.dd.label }}    {{ obj.dd }}</p>
        <p>{{ obj.dd.label }}
            {% for row in obj.dd %}
                {{ row }}{{ '&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp' }}
            {% endfor %}
        </p>
    
    
        <input type="submit" value="提交">
    </form>
    
    
    
    
    
    </body>
    </html>

    对应的效果

    ----------------------------------------------------------------------

    用单选下拉框是,下拉框内的内容需要从数据库中取,

    如果直接去,浏览器会将数据库的内容加载然后存到内存。后期数据库更新时,浏览器也不会更新的,所以需要添加__int__()属性

    from app01 import models
    class LoveForm(forms.Form):
        
       price
    = fields.IntegerField() user_id = fields.IntegerField( # widget=widgets.Select(choices=[(0,'alex'),(1,'杨建'),(2,'刘昊辰')]) widget = widgets.Select() ) def __init__(self,*args,**kwargs): #实时根据数据库更新,每次运行时,都会执行__int__(),得到choices super(LoveForm, self).__init__(*args,**kwargs) self.fields['user_id'].widget.choices=models.UserInFo.objects.values_list('id','username') def love(request): obj=LoveForm() return render(request,'love.html',{'obj':obj})
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/lhqlhq/p/9182620.html
Copyright © 2011-2022 走看看