You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中创建学校项目所需的多选表单?

嘿,我来帮你搞定这个Django多选表单的需求!看你需要的是类似图里的多选复选框样式,我分步骤给你拆解实现方法,保证清晰好上手:

1. 先搞定选项的存储(可选)

如果你需要把这些选项持久化存储(比如以后要在后台修改选项),可以先定义一个简单的模型来存可选内容:

from django.db import models

class Interest(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

写完后记得执行python manage.py makemigrations和python manage.py migrate来生成数据表,之后就能在后台添加你需要的选项啦。

2. 创建多选表单类

这里分两种情况,你可以根据自己的需求选:

情况一:静态固定选项(不需要存数据库)

要是选项是固定不变的,直接用静态选项的表单就好:

from django import forms

class MultiSelectForm(forms.Form):
    # 这里替换成你实际需要的选项
    OPTIONS = [
        ('reading', '阅读'),
        ('coding', '编程'),
        ('sports', '运动'),
        ('music', '音乐'),
    ]
    interests = forms.MultipleChoiceField(
        choices=OPTIONS,
        widget=forms.CheckboxSelectMultiple,  # 这就是渲染成多选复选框的关键
        label='你的兴趣爱好'
    )

情况二:关联数据库中的选项

如果选项存在刚才定义的Interest模型里,就用关联模型的表单:

from django import forms
from .models import Interest

class MultiSelectModelForm(forms.Form):
    interests = forms.ModelMultipleChoiceField(
        queryset=Interest.objects.all(),  # 从数据库获取所有选项
        widget=forms.CheckboxSelectMultiple,
        label='你的兴趣爱好'
    )
3. 写视图处理表单逻辑

接下来写视图函数,负责展示表单和处理提交的数据:

from django.shortcuts import render
from .forms import MultiSelectForm  # 或者你用的MultiSelectModelForm

def multi_select_view(request):
    if request.method == 'POST':
        form = MultiSelectForm(request.POST)
        if form.is_valid():
            # 获取选中的选项,返回的是选项值的列表(比如['reading', 'coding'])
            selected_interests = form.cleaned_data['interests']
            # 这里可以添加你的业务逻辑,比如保存到用户模型、生成统计数据等
            return render(request, 'success.html', {'selected': selected_interests})
    else:
        # GET请求时展示空表单
        form = MultiSelectForm()
    return render(request, 'multi_select_form.html', {'form': form})
4. 模板渲染表单

最后写模板文件multi_select_form.html,把表单渲染出来,还可以自定义样式匹配你的需求:

<form method="post">
    {% csrf_token %}
    <!-- 简单渲染方式,直接用Django自带的格式 -->
    {{ form.as_p }}

    <!-- 如果你想自定义布局,也可以手动循环渲染每个复选框 -->
    <!-- <div class="interest-group">
        <h3>{{ form.interests.label }}</h3>
        {% for checkbox in form.interests %}
            <div class="checkbox-item">
                {{ checkbox.tag }}
                <label for="{{ checkbox.id_for_label }}">{{ checkbox.choice_label }}</label>
            </div>
        {% endfor %}
    </div> -->

    <button type="submit">提交</button>
</form>
5. 配置URL

最后在项目的urls.py里添加路由:

from django.urls import path
from . import views

urlpatterns = [
    path('interest-form/', views.multi_select_view, name='interest-form'),
]

这样运行项目后,访问/interest-form/就能看到你要的多选表单啦!

内容的提问来源于stack exchange,提问作者fdika24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:17:35