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

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

本文介绍在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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。