f4n*_*4nt 2 python django django-models django-forms
我现在有一个问题,可能会忽略一些非常微不足道的事情.我的模型中有一个字段,应该允许通过复选框表单进行多项选择(它不必是管理屏幕中的复选框,只是在最终用户将看到的表单区域中).目前我有这样的字段设置:
# Type of Media
MEDIA_CHOICES = (
('1', 'Magazine'),
('2', 'Radio Station'),
('3', 'Journal'),
('4', 'TV Station'),
('5', 'Newspaper'),
('6', 'Website'),
)
media_choice = models.CharField(max_length=25,
choices=MEDIA_CHOICES)
Run Code Online (Sandbox Code Playgroud)
我需要把它拿出来然后在表单中创建一个复选框可选字段.当我创建一个ModelForm时,它想要一个下拉框.所以我自然会覆盖那个领域,我得到了我想要的复选框.但是,当表单提交时,看起来管理屏幕时似乎没有任何有用的东西.然而,数据库显示我选择了许多东西,这是一个积极的信号.但是,如何才能在管理屏幕中正确反映?
编辑:FWIW我很乐意接受文档链接作为答案,因为看起来我只是在掩饰明显的东西.
Ben*_*end 15
在这种情况下,最简单的方法是将选项放入单独的模型中,然后使用ManyToMany关系.之后,您只需覆盖该字段的ModelForm小部件即可使用forms.CheckboxSelectMultiple和Django将自动执行正确的操作.如果你坚持使用CharField,你可能不得不做这样的代码片段.
@ 2.评论:你是如何重写小部件的?这就是我的工作方式,它完美无缺:
class SomeModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SomeModelForm, self).__init__(*args, **kwargs)
self.fields['some_field'].widget = forms.CheckboxSelectMultiple()
Run Code Online (Sandbox Code Playgroud)