【问题标题】:Multichoicefield with checkbox in django with Model forms带有模型表单的 django 中带有复选框的多选字段
【发布时间】:2015-04-28 03:35:23
【问题描述】:

我正在 django 中初始化一个模型表单,然后添加一个多选字段,其中的选项显示为内联复选框,用于更新我的模型上的 Arrayfield。

型号代码:

Class Data(models.Model): 
    my_array = ArrayField(models.CharField(max_length=100, blank=True), null=True)

用于初始化与 my_array 的选择相对应的 Multichoice 字段的表单代码:-

class DataForm(ModelForm):
    class Meta:
        model = models.Data
        fields = ('my_array')
    my_choice = (('','None'), ('A','A'), ('B','B'), ('C','C'))
    my_array = forms.MultipleChoiceField(choices=my_choice , widget=forms.CheckboxSelectMultiple(), required=False)

检查的值正确保存到 ArrayField 'my_array' 中。我在此表单上检索这些值时遇到问题。

当为先前填写的表单检索此多选字段时,我需要根据保存的模型检查(选择)值。目前,当检索模型时,我正在获取与 my_array 对应的值,但未选中复选框。似乎我在表单上对 my_array 的定义没有使用 Model 中的 my_array 字段来预填充这些复选框。知道如何做到这一点吗?

【问题讨论】:

  • 您是否在操作完成后保存视图中的值?这就是你的问题所在。
  • 是的值被保存在视图的帖子中,当我查询我的模型时,我将这些值作为数组取回
  • 实际上,您对未正确保存值的看法有些正确。经过仔细检查,我发现在我的模型中,选择不是保存为 ['A','B','C'] ,而是在单个对象中保存为 [['A,B,C']]。事实证明,这是由于在 PostGres db 上之前保存的数据上将 Charfield 转换为 Arrayfield 时出现的问题。感谢您的提示。

标签: django forms model


【解决方案1】:

仔细观察后,我注意到我的模型上的一些值被保存为 [['A','B','C']] 而不是 ['A','B','C'] 这就是为什么在为这些从模型实例化表单时,它无法选择这些值。

发生这种情况是因为在某个时候,我将模型上的 my_array 从 Charfield 转换为 ArrayField,并且相应地还在 Postgresql 上运行了一个脚本来转换现有值。

我仍然不确定为什么,但其中一些转换后的值在单个数组对象中以逗号分隔,而不是被拆分为多个数组对象。我希望这将有助于避免再次遇到此问题,如果我找到了以正确方式进行这些转换的修复程序,我将在此处发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2017-04-25
    • 2015-04-14
    • 2018-12-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多