首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django-admin:显示JSONField的多选择字段

Django-admin:显示JSONField的多选择字段
EN

Stack Overflow用户
提问于 2022-01-28 10:26:15
回答 1查看 284关注 0票数 1

我有一个带有字段channel (JSONField)的模型。我使用channel来增强db中的字符串数组。默认情况下,JSONField显示为django-admin中的textarea。我的目标是在某种程度上使channel成为一个多选择字段,然后转换成像这个["APP", "WEB"]那样的字段。

models.py

代码语言:javascript
运行
复制
@dataclass
class ChannelTypes:
    WEB: str = 'WEB'
    APP: str = 'APP'

class DiscountRule(models.Model):
    ...
    channel = models.JSONField(null=False, blank=False, default=list(astuple(ChannelTypes())))

My Approach: In forms.py,添加仅显示在管理表单中且不存储在db中的自定义字段(布尔值)。就像这样:

代码语言:javascript
运行
复制
class RuleAdminForm(forms.ModelForm):
    WEB = forms.BooleanField(required=False)
    APP = forms.BooleanField(required=False)

类似地,admin.py将填充以下自定义字段:

代码语言:javascript
运行
复制
def get_form(self, request, obj=None, *args, **kwargs):
    form = super(BaseDiscountRuleAdmin, self).get_form(request, *args, **kwargs)
    for i in obj.channel:
        form.base_fields[i].initial = True
    return form

但这会导致自定义字段值在更新1-2次后由于使用base_fields[field_name].initial而持续存在的问题。

目标构想:多选择选项1

EN

回答 1

Stack Overflow用户

发布于 2022-05-18 15:37:39

您可以附加到管理类自定义表单。

代码语言:javascript
运行
复制
class DiscountRuleAdmin(admin.ModelAdmin):
    form = DiscountRuleForm

forms.py

代码语言:javascript
运行
复制
class DiscountRuleForm(forms.ModelForm):
    channel = forms.MultipleChoiceField(
        widget=FilteredSelectMultiple('channels', False),
        required=False,
    )

class Meta:
    model = DiscountRule
    fields = '__all__'

绕着它玩

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70892188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档