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运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!

转载于:https://www.cnblogs.com/ccorz/p/5889542.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值