我无法在管理员的 ModelForm 中结转以前选择的项目。我想使用forms.CheckboxSelectMultiple小部件,因为这是此用例中最直接的 UI。它的工作原理是在保存时存储值。但是在编辑之前保存的项目时,之前保存在该字段中的值不会反映在小部件中。
用户界面示例:
发布后(编辑该项目,将其返回空白):
但是,当编辑项目时不使用小部件而是使用常规 CharField 时,它看起来像:
那么由于某种原因,复选框小部件不代表这些值?
这是我的简化设置,models.py
POST_TYPES = (
('blog', 'Blog'),
('portfolio', 'Portfolio'),
('beeldbank', 'Beeldbank'),
)
class Module(models.Model):
title = models.CharField(max_length=100, verbose_name='title')
entriesFrom = models.CharField(max_length=100)
def __unicode__(self):
return self.title
表格.py:
class ModuleForm(forms.ModelForm):
entriesFrom = forms.MultipleChoiceField(
choices=POST_TYPES,
widget=CheckboxSelectMultiple,
label="Pull content from",
required=False,
show_hidden_initial=True)
class Meta:
model = Module
def __init__(self, *args, **kwargs):
super(ModuleForm, self).__init__(*args, **kwargs)
if kwargs.has_key('instance'):
instance = kwargs['instance']
self.fields['entriesFrom'].initial = instance.entriesFrom
logging.debug(instance.entriesFrom)
管理员.py
class ModuleAdmin(admin.ModelAdmin):
form = ModuleForm
因此,当编辑先前保存的项目并选择说“博客”时,在init上进行调试会返回 self.fields['entriesFrom'] ([u'blog',]) 上的正确值,但它不会反映在复选框中(什么都没有在管理员中显示为选中)。
编辑
更新了 ModuleForm 类以传递初始值,但在初始值(“[u'blog']”)中有一些值时,仍然没有预先填充任何内容。