Prefill MultipleChoiceField django

时间:2016-05-15 09:22:09

标签: django checkbox django-forms

假设我有以下型号

class Application(models.Model):
    occupation = models.TextField()

和表格

class ApplicationForm(forms.ModelForm):
    def __init__(self, *args, **kwargs)
        super().__init__(*args, **kwargs)
        self.fields['occupation'] = forms.MultipleChoiceField(choices=OCCUPATION_CHOICES, widget=CheckboxSelectMultiple)

    class Meta:
        model = Application

当我将它与实例一起使用时(例如通过管理员),未选择选项。

我做错了什么?

编辑: 澄清:当我选择一些选项时,我点击提交保存数​​据。它们在数据库中看起来像['undergraduate', 'postdoc']。但是它们不再以形式检查了。

2 个答案:

答案 0 :(得分:2)

我设法让它像这样工作。

import ast
class ApplicationForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        if kwargs.get('instance'):
            kwargs['initial'] = {
                'occupation': ast.literal_eval(kwargs.get('instance').occupation or '[]'),
            }
        super().__init__(*args, **kwargs)

    class Meta:
        model = Application
        widgets = {
            'occupation': CheckboxSelectMultiple(choices=OCCUPATION_CHOICES),
        }

感谢 RodrigoDela 让我意识到我做错了什么,并指出了我正确的方向。

答案 1 :(得分:1)

修改: TextField 无法存储多个选项。看看这个: Django Model MultipleChoice

您可以使用此方法,也可以覆盖表单,以便这些内容可以将instance.occupation内容解析为form.occupation字段。