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


    前言

    select下拉框选项经常会需要从数据库动态拿数据,每次刷新页面能拿到最新的数据。

    Teacher 模型

    Teacher 表

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    class Teacher(models.Model):
        """老师表"""
        name = models.CharField(max_length=30)
        age = models.IntegerField(blank=True, null=True)
        tel = models.CharField(max_length=30)
    
    

    表里面新增一些数据

    form与views

    form 表单设计下拉框,下拉框的值读取Teacher表的id和name字段

    from django import forms
    from .models import Teacher
    from django.forms import widgets
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    class SelectDemo(forms.Form):
        teacher = forms.CharField(
                            label="老师",
                            initial=[1, ],
                            widget=widgets.Select())
    
        # 保证每次访问重新获取最新数据
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.fields["teacher"].widget.choices = Teacher.objects.values_list("id", "name")
    

    数据库读取的数据返回list of tuple格式,如

    [
      ("1", "悠悠老师"),
      ("2", "张三老师"),
      ("3", "李四老师"),
      ("4", "王五老师"),
       ]
    

    views.py视图打开页面

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    class SelectDemoView(View):
    
        def get(self, request):
            form_obj = SelectDemo()
            return render(request, "select.html", locals())
    

    模板

    模板中读取select下拉框字段

    <form action="" method="POST" id="detail-form" >
        {% csrf_token %}
        {% for field in form_obj %}
            <p>
                {{ field.label_tag }}
                {{ field }}
                {{ field.errors }}
            </p>
    
        {% endfor %}
    
        <p>
            <input type="submit" value="提交" >
        </p>
    </form>
    

    select下拉框显示效果

    form_model实现下拉框

    还可以用下面这种方式,通过form_model实现

    from .models import Teacher
    from django.forms import models as form_model
    
    
    class SelectDemo(forms.Form):
        # 下拉单选
        teacher = form_model.ModelChoiceField(
                                      label="老师",
                                      initial=[1, ],
                                      queryset=Teacher.objects.all())
        # 下拉多选
        # teacher = form_model.ModelMultipleChoiceField(queryset=Teacher.objects.all())
    

    但是在 Teacher 模型里面需定义__str__方法,并且返回name值

    class Teacher(models.Model):
        """老师表"""
        name = models.CharField(max_length=30)
        age = models.IntegerField(blank=True, null=True)
        tel = models.CharField(max_length=30)
    
        def __str__(self):
            return self.name
    

    这样我们在页面上看到的效果就是跟上面一样

  • 相关阅读:
    正则化--L1正则化(稀疏性正则化)
    机器学习分类算法之随机森林
    机器学习分类算法之逻辑回归
    机器学习分类算法之朴素贝叶斯
    机器学习分类算法之K近邻(K-Nearest Neighbor)
    机器学习之特征工程
    uwsgi支持http长链接
    机器学习之数据预处理
    机器学习之场景解析
    机器学习之基本概念
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15008759.html
Copyright © 2020-2023  润新知