管理者のModelFormで以前に選択したアイテムを引き継ぐのに問題があります。このユースケースで最も簡単なUIであるため、 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
したがって、「blog」などを選択して以前に保存したアイテムを編集すると、initでデバッグすると、self.fields ['entriesFrom']([u'blog'、])に正しい値が返されますが、チェックボックスには反映されません(何もありません)。管理者で選択済みとして表示されます)。
編集
ModuleFormクラスを更新して初期値を渡しますが、初期値( "[u'blog']")にいくつかの値がある間は、何も事前入力されません。