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
这样我们在页面上看到的效果就是跟上面一样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具