Django SelectMultiple无法显示保存的选项

2024-09-27 18:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在django1.10中,我用SelectMultiple动态填充选项做了一个管理表单

这是模型:

class HelpRequest(models.Model):
    name = models.CharField(max_length=32)
    groups = models.TextField(blank=True)

这是我的表格:

^{pr2}$

表单在管理中使用:

@admin.register(HelpRequest)
class HelpRequestAdmin(admin.ModelAdmin):
    form = AdminHelpRequestForm 

SelectMultiple将选择保存到模型中

>>> ar = HelpRequest.objects.get(pk=1)
>>> print(ar.groups)
['mygroup', 'othergroup', 'yetanothergroup']

但不会在小部件中显示模型实例中保存的选项。在

这里怎么了?在


Tags: name模型表单modeladminmodels选项动态
1条回答
网友
1楼 · 发布于 2024-09-27 18:00:06

在某种程度上与直觉相反,解决方案是添加一个自定义clean来创建一个逗号分隔的选项字符串,然后将该字符串拆分为一个列表并手动将其设置为初始值:

class AdminHelpRequestForm(ModelForm):
   def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)
      self.fields['groups'] = forms.MultipleChoiceField(choices=groups_from_ldap,
                                              widget=SelectMultiple(attrs={'class': 'chosen'}))

    if self.instance:
        self.initial['groups'] = self.instance.groups.split(',')

class Meta:
    model = HelpRequest
    fields = ('name', 'groups')

def clean_groups(self):
    groups = self.cleaned_data['groups']
    if groups:
        assert isinstance(groups, (list, tuple))
        return str(','.join(groups))
    else:
    return ''

这样做的好处是使组在管理列表视图中更加简洁易读。在

另一种更简洁的可能性是,根本就没有那种干净的功能,而只是随波逐流ast.literal_评估公司名称:

^{pr2}$

相关问题 更多 >

    热门问题