如何在不使用ManyToManyField的情况下在Django中获得多个选择?

时间:2014-10-29 16:39:22

标签: django django-models

我需要创建一个可以选择多个选项的字段而不是一个。这些选择是固定的。例如:

如果我们想要从多个选项中选择一个选项,我们使用CharField和choices选项。

SEX_CHOICES = (('M', 'Male'),
               ('F', 'Female')
              )

class Model1(models.Model):
    name = models.CharField(max_length=30)
    sex = models.CharField(max_length=1, choices=SEX_CHOICES)

但是我需要类似的设置来进行多项选择。我不想使用ManyToManyField,因为选择将被修复,并且不会随着时间的推移而改变。

请指导。

4 个答案:

答案 0 :(得分:2)

您有三个基本选择:

  1. 在他的回答中建议使用类似djangozone的东西。
  2. 为每个选项添加一个布尔字段。你说选择不会改变。如果他们真的没有改变,为什么要使用一种允许他们改变的方法呢?与方法#1相比,这为您提供了许多优势,即您可以为选择字段编制索引。
  3. 使用多对多字段。你说你不想这样做但不说出原因。
  4. 如果他们真的没有改变,我会选择#2。拥有一堆布尔字段可以很好地表示一组不会改变的选择。

答案 1 :(得分:1)

要进行多重选择,您可以将widget = forms.SelectMultiple添加为表单中该字段的窗口小部件。

但更大的问题是保存所选的东西。为此,您必须编写自己的字段,这样可以将多个选项保存到单个CharField中。

查看此页面: https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

答案 2 :(得分:1)

检查multiselect field包裹。它做你想做的,它运作良好(至少我4个月前使用它)。您也可以查看https://pypi.python.org/pypi/django-select-multiple-field/,但我尚未对其进行测试。

答案 3 :(得分:0)

我认为你在寻找类似的东西

from django import forms


class Test(forms.Form):
    OPTIONS = (
        ("a", "A"),
        ("b", "B"),
        )
    name = forms.MultipleChoiceField(widget=forms.SelectMultiple,choices=OPTIONS)