Django Form中ChoiceField动态获取数据库数据的两种实现方案

落日邮差
落日邮差
发布时间:2026-10-13 | 5人浏览过
原创

本文介绍在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从数据库选取内容的实例分享完毕,希望能为读者提供有用参考,欢迎支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表