【发布时间】:2011-04-20 20:20:39
【问题描述】:
我无法在管理员的 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
forms.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)
admin.py
class ModuleAdmin(admin.ModelAdmin):
form = ModuleForm
因此,当编辑以前保存的项目并选择说“博客”时,init 上的调试会返回 self.fields['entriesFrom'] ([u'blog',]) 上的正确值,但它没有反映在管理员的复选框中(没有显示为选中状态)。
编辑
更新了 ModuleForm 类以传递初始值,但在初始值(“[u'blog']”)中有一些值时,仍然没有预先填充任何内容。
【问题讨论】: