zoukankan      html  css  js  c++  java
  • Django之model.form创建select标签

    前言

    之前我们学习了form表单验证用户输入格式和自动创建HTML,那么如果用户创建select标签时怎么办呢,先来看下这个东西:

    models.py 数据格式:

    class UserInfo(models.Model):
        caption=models.CharField(max_length=16)
    
    class UserType(models.Model):
        username=models.CharField(max_length=32)
        pwd=models.IntegerField
        user_type=models.ForeignKey('UserInfo')
    

    views.py:

    from django.shortcuts import render, HttpResponse
    from s19 import models
    from django import forms
    
    # Create your views here.
    
    class IndexForm(forms.Form):
    
        c = [
        	(1,'ceo'),
        	(2,'coo'),
        ]
        user_info_id = forms.IntegerField(widget=forms.Select(choices=c))
    
    def index(request):
    		#创建模拟用户
        # for i in range(10):
        #     models.UserInfo.objects.create(caption='CE'+str(i))
        form = IndexForm()
        return render(request,'index.html',{'form':form})
    

    html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>index</h1>
        {{ form.user_info_id }}
    </body>
    </html>
    

    如果这么写,我们可以看到页面上有select标签实现,但这种方式是在内存里,如果在数据库中我们怎么来实现呢?

    数据库提取,通过form实现HTML页面

    首先要直到value_list,models中使用会将对象提取为元组模式,我们可以将对象中的id,caption 提取出来.

    from django.shortcuts import render, HttpResponse
    from s19 import models
    from django import forms
    
    # Create your views here.
    
    class IndexForm(forms.Form):
    
        def __init__(self,*args,**kwargs):
            super(IndexForm,self).__init__(*args,**kwargs)
            self.fields['user_info_id'].widget.choices = models.UserInfo.objects.all().values_list('id','caption')
        c = models.UserInfo.objects.all().values_list('id','caption')
        user_info_id = forms.IntegerField(widget=forms.Select(choices=c))
    
    def index(request):
        # for i in range(10):
        #     models.UserInfo.objects.create(caption='CE'+str(i))
        form = IndexForm()
        return render(request,'index.html',{'form':form})
    

    需要注意一点:在上述代码中我们在类中添加了一条构造方法,使用父类的构造方法,将静态字段重新赋值,为什么呢?因为在在IndexForm的类中,我们取值是通过静态字段取值的,django运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!

  • 相关阅读:
    RSA解密时BadPaddingException解决方法
    CAP定理的理解
    服务降级、熔断、隔离
    javascript原型 原型链
    Redis基础数据类型及应用场景
    log4j
    个人免签支付
    Spring Security Oauth2 认证
    elementUI的栅格布局
    用 Vue+ElementUI 搭建后台管理极简模板
  • 原文地址:https://www.cnblogs.com/ccorz/p/5889542.html
Copyright © 2011-2022 走看看