欢迎访问宙启技术站
智能推送

Django中如何获取ModelMultipleChoiceField()的选中值

发布时间:2023-12-29 07:28:50

在Django中,可以使用ModelMultipleChoiceField()来获取多个选中的值。ModelMultipleChoiceField()是Django表单中的一个字段类,用于选择多个模型对象。

下面是一个使用ModelMultipleChoiceField()的示例,假设有一个简单的博客应用,有一个模型类Category代表博客的分类,我们需要在表单中实现一个多选框来选择博客分类:

首先,在models.py文件中定义Category模型类:

from django.db import models

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

    def __str__(self):
        return self.name

在forms.py文件中创建一个表单类,使用ModelMultipleChoiceField()来定义一个多选框字段:

from django import forms
from .models import Category

class BlogForm(forms.Form):
    categories = forms.ModelMultipleChoiceField(queryset=Category.objects.all(), widget=forms.CheckboxSelectMultiple)

在上面的代码中,我们使用Category.objects.all()来获取所有的分类对象,并将其传递给ModelMultipleChoiceField()的queryset参数,通过widget参数指定选择框的样式为CheckboxSelectMultiple。

接下来,在views.py文件中处理表单提交的数据:

from django.shortcuts import render
from .forms import BlogForm

def blog(request):
    if request.method == 'POST':
        form = BlogForm(request.POST)
        if form.is_valid():
            categories = form.cleaned_data['categories']
            # 处理选中的分类对象
            for category in categories:
                print(category)
    else:
        form = BlogForm()
    return render(request, 'blog.html', {'form': form})

在上面的代码中,我们首先判断请求的方法是否为POST,然后创建一个BlogForm对象,并将request.POST作为参数传递给表单对象的构造函数。然后检查表单是否有效,如果有效,则可以通过form.cleaned_data来获取表单中的数值,其中categories对应于ModelMultipleChoiceField()字段的名称。在这个例子中,我们可以通过循环遍历categories获取选中的分类对象。

最后,我们在模板文件blog.html中展示表单:

<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">提交</button>
</form>

在上面的代码中,我们通过form.as_p将表单以一个段落的形式显示在页面中,并添加了一个提交按钮。

以上就是使用ModelMultipleChoiceField()获取选中值的示例。