django - 预填充 MultipleChoiceField django

标签 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']。但它们不再在表单中被检查。

最佳答案

我设法让它像这样工作。

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,他让我意识到自己做错了什么,并为我指明了正确的方向。

关于django - 预填充 MultipleChoiceField django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236559/

相关文章:

python - 将值从一个类/函数传递到另一个类/函数

django - $sent_http_content_language 不起作用

c# - 如何在 ASP.NET 的 ListView 中的复选框的 CheckedChanged 事件中找到数据键?

django - 使用 TabularInline 在 Django Admin 中保存的优先级

Django - 覆盖的表单 save() 方法返回 None?

python - 在 Django 中使用 many=True 截断模型序列化程序的长度

django - 向现有的 django Mongoengine 模型添加了新的 bool 字段,但之后无法过滤该字段

javascript - 将 Vue-switch 值绑定(bind)到 data 属性

javascript - knockout 计算写入未触发

django - 使用用户 ID 保存模型表单?