gpt4 book ai didi

Django:admin 中的 MultipleChoiceField 用于继承以前保存的值

转载 作者:行者123 更新时间:2023-12-04 00:48:30 33 4
gpt4 key购买 nike

我无法在管理员的 ModelForm 中继承之前选择的项目。我想使用 forms.CheckboxSelectMultiple 小部件,因为这是此用例中最直接的 UI。它的工作原理是在保存时存储值。但是当编辑之前保存的项目时,之前保存在该字段中的值不会反射(reflect)在小部件中。

用户界面示例:

alt text

发布后(编辑该项目,返回空白):

alt text

但是,当编辑项目时不使用小部件而是使用常规 CharField 时,它看起来像:

alt text

那么出于某种原因,复选框小部件未表示这些值?

这是我的简化设置,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',]) 上的正确值, 但它没有反射(reflect)在管理员的复选框中(没有显示为选中)。

编辑

更新了 ModuleForm 类以传递初始值,但是当初始值 ("[u'blog']") 中有一些值时,仍然不会预填充任何内容。

最佳答案

解决方法:

通过整数而不是字符串设置选项。

POST_TYPES = (
(1, 'Blog'),
(2, 'Portfolio'),
(3, 'Beeldbank'),
)

该死的,这不值得打破我的头骨。

关于Django:admin 中的 MultipleChoiceField 用于继承以前保存的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856163/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com