Django:检查不固定选项的多项选择

Posted

技术标签:

【中文标题】Django:检查不固定选项的多项选择【英文标题】:Django: Check multiple choices with not fixed choices 【发布时间】:2017-05-25 08:35:45 【问题描述】:

我是 Django 新手,我正在尝试使用复选框创建多项选择。问题是我发现的所有示例都有在表单中指定的固定选项,而我不需要。

更具体地说,让这成为一个简单的汽车经销商应用程序的模型:

class CarBrand(models.Model):
    name = model.CharField()

class CarModel(models.Model):
    name = model.CharField()
    brand = model.ForeignKey(CarBrand)

我的目标是当我进入奥迪页面时,我得到选项 A3、A4、A5,但是当我进入宝马页面时,我得到选项 M3、M4、M5。点击提交后,它应该会发送所有被选中的车型。

【问题讨论】:

固定选择是什么意思?通常所有的checkbox都有对应实例的id,所以不固定。 我的意思是我没有可供选择的静态字典。选择取决于登录的用户以及他/她在哪个页面上打开表单。如示例中,如果打开宝马页面,会选择M3、M4、M5,但如果打开奥迪页面,则会显示其他选择。 【参考方案1】:

为表单提供一个__init__ 方法,该方法将 CarBrand 作为参数,然后设置查询集以从中进行选择:

class CarForm(forms.Form):
    def __init__(self, car_brand, *args, **kwargs):
        self.fields['cars'] = forms.ModelMultipleChoiceField(
            queryset=CarModel.objects.filter(brand=car_brand),
            widget=forms.CheckboxSelectMultiple)
        super(CarForm, self).__init__(*args, **kwargs)

现在在您的视图中,首先获取页面的相关 CarBrand 实例,然后使用 CarForm(car_brand, request.POST) 等创建表单。

【讨论】:

这正是我所需要的。谢谢。 如何访问模板中的 CarModel 字段?我只得到choice_label,但每个选择都需要其他字段。我正在尝试实现这样的目标:postimg.org/image/trj07ajgj

以上是关于Django:检查不固定选项的多项选择的主要内容,如果未能解决你的问题,请参考以下文章

限制反应中的多项选择

多项选择应用程序功能

如何防止 optgroups ios Safari 中的多项选择

如何分隔不同列中的多项选择短语(谷歌表单)?

尝试创建一个简单的多项选择游戏

我应该如何在角度材料中实现多项选择选项?