【问题标题】:Django, create multiselect checkbox inputDjango,创建多选复选框输入
【发布时间】:2013-10-28 21:16:58
【问题描述】:

我有一个带有整数字段的模型,并且希望有一个替代的表单输入呈现而不是默认文本框,所以我有以下内容:

models.py: myfield = models.IntegerField(default=7, blank=True)

想要以下:

[x] Choice A (value 0)

[ ] Choice B (value 1)

[x] Choice C (value 2)

因此,在save 上,选项的计算方式如下:(因为选择了选项 A 和 C 而未选择选项 2)。

myfield = sum(选择的选择乘以2得到选择的选择的值)

这样:

my field = (1 * 2^0) + (0 * 2^1) + (1 * 2^2)

my field = 1 + 0 + 4

my field = 5#最终值

如果这是 Django 之外的任何内容,那么通过不直接映射到模型中的数据库字段的标准复选框分组会更直接,但是对于 Django,我目前不知所措。

我参考了以下材料,但仍然无法弄清楚该怎么做:

widgets

modelforms

感谢您的帮助和意见。

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    您可以像这样使用自定义小部件:

    from django import forms
    
    class BinaryWidget(forms.CheckboxSelectMultiple):
        def value_from_datadict(self, data, files, name):
            value = super(BinaryWidget, self).value_from_datadict(data, files, name)
            if name == 'myfield':
                value = sum([2**(int(x)-1) for x in value])
            return value
    

    并在您的模型表单中覆盖myfield,如下所示:

    class MyModelForm(forms.ModelForm):
        ...
        myfield = forms.IntegerField(widget=BinaryWidget(choices=(
            ('1', '2^0',), ('2', '2^1',), ('3', '2^2',)
            )))
    

    这将为您提供预期的结果,尽管您可能需要反向功能 - 例如在编辑时设置初始值,如果需要请告诉我,以便我们也可以进行编辑。

    【讨论】:

    • 非常感谢。我实际上尝试并使用了另一种似乎也有效的方法,尽管它不像你的那么简单。就像这样 mychoices_cb = forms.MultipleChoiceField(label='Checkbox For', required=False, widget = forms.CheckboxSelectMultiple, Choices=CHOICES),现在的问题是,我不知道如何将它们默认为全部选中。我真的希望 Django 文档更有帮助,这样我就不必对可接受的属性进行反复试验。你知道吗?
    • 找到了。初始 = (c[0] for c in CHOICES).
    • @mariodev 我正在结合使用您的自定义小部件:stackoverflow.com/a/8152717/3849359。因此我不得不稍微改变它,因为我的值已经作为比特选择返回,我只需要对它们求和。现在我想得到相反的结果,因为我也想编辑选择。能否请你帮忙?这是我的问题:stackoverflow.com/q/25575951/3849359
    【解决方案2】:

    试试Select2。这是一个更好的选择。

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 2010-09-22
      • 1970-01-01
      • 2011-12-11
      • 2017-10-10
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      相关资源
      最近更新 更多