我正在构建'编辑'我的表格页面。此页面应显示已保存数据的表单,因此表单预先填充了已保存的数据。
对于大多数字段,它适用于大多数字段,但我遇到了MultipleChoiceField / CheckboxSelectMultiple
值无法恢复的问题。因此,不是使用保存的表单中的数据检查相应的复选框,而是取消选中它们。那是为什么?
forms.py
class MemberForm( forms.ModelForm ):
# ......
MODEL_CATEGORIES = (
('advisor', 'advisor'),
('member', 'member'),
('admin', 'admin'),
)
model_categories = forms.MultipleChoiceField(
widget = forms.CheckboxSelectMultiple,
choices = MODEL_CATEGORIES
)
class Meta:
model = Member
fields = [ 'model_categories' ]
模型
class Member( models.Model ):
model_categories = models.CharField(
max_length = 255,
null = True,
blank = True )
控制器
def profile_edit_form( request ):
user = request.user or None
# Get user member profile instance
instance = get_object_or_404( Member, author = user )
form = MemberForm( request.POST or None, instance = instance )
context = {
"form" : form,
"instance": instance
}
if form.is_valid():
# ...
return redirect( 'profile_display' )
else:
# Initial form display, and redisplay of invalid form
return render( request, 'profile_edit_form_view.html', context )
模板
<form action="/accounts/profile-edit-form/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit"/>
</form>
答案 0 :(得分:1)
您可以尝试使用
形式的initial
form = MemberForm( request.POST or None, instance = instance,
initial={'model_categories': 'advisor'})
答案 1 :(得分:0)
它看起来像是Django的“功能”,并且不会得到修复: https://code.djangoproject.com/ticket/28531
如果您在模型中使用Postgres数据库,使用ARRAY字段而不是简单的字段,解决方案很简单:
model_categories = ArrayField( models.CharField( max_length = 200 ), blank = True, null = True )
从这种类型的模型字段中正确存储和恢复多选值,无需任何数据处理。