Django Form中ChoiceField动态获取数据库数据的两种实现方案
本文介绍在Django自定义Form中,如何让ChoiceField下拉菜单动态显示数据库内容。提供两种方案:一是在视图函数中通过get_object函数动态赋值form.fields['pre'].choices;二是在Form类的__init__方法中重写widget.choices以每次访问时从数据库获取最新数据。
Django Form动态下拉菜单需求背景
在实际开发中,我们常遇到需要在自定义Django Form表单中创建下拉菜单的需求,且下拉选项必须从数据库(如objectForm models)中实时提取。
方案一:视图层动态赋值实现
首先定义form.py文件中的表单类。
class objectForm(forms.Form): pre = choicefield(lable = "工作")
针对上述需求,以下是具体的解决思路。
第一步,定义一个辅助函数用于处理数据。
辅助函数get_object定义
def get_object(request):
r = [('', '----')]
for obj in objectModels.objects.all():
r = r + [(obj.id, obj.name)]
return r
视图函数中应用choices属性
第二步,在views.py的视图逻辑中调用该函数。
form.fields['pre'].choices = get_object(request)
完成上述配置后,下拉菜单即可正常工作。
此前在百度搜索Django Form相关问题时未找到确切答案,特此整理分享,供后续开发者参考。
方案二:Form类__init__中实时更新数据源
补充知识:如何实现Django Form表单中select下拉菜单数据源的实时更新,确保每次访问页面时都从数据库获取最新内容。
核心要点在于:在Form类实例化时,于__init__()方法中重新指定select组件的数据源。
Form类__init__方法重写示例
from django.shortcuts import render,redirect
from app3 import models
from app3 import form
from django import forms
from django.forms import widgets
#静态字段,value_list获取列表[()]加元组返回值
class Fromdb(forms.Form):
purpose = forms.CharField()
user = forms.IntegerField(
widget=widgets.Select()
)
#保证每次访问重新获取最新数据
def __init__(self,*args,**kwargs):
super(Fromdb,self).__init__(*args,**kwargs)
self.fields["user"].widget.choices=models.Stu.objects.values_list("id", "name")
def formdb(request):
stus = Fromdb()
return render(request,"formdb.html",{"stus":stus})
以上关于在Django Form中通过ChoiceField从数据库选取内容的实例分享完毕,希望能为读者提供有用参考,欢迎支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









