我有一个带有字段channel
(JSONField)的模型。我使用channel
来增强db中的字符串数组。默认情况下,JSONField显示为django-admin中的textarea。我的目标是在某种程度上使channel
成为一个多选择字段,然后转换成像这个["APP", "WEB"]
那样的字段。
models.py
@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中的自定义字段(布尔值)。就像这样:
class RuleAdminForm(forms.ModelForm):
WEB = forms.BooleanField(required=False)
APP = forms.BooleanField(required=False)
类似地,admin.py
将填充以下自定义字段:
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
发布于 2022-05-18 15:37:39
您可以附加到管理类自定义表单。
class DiscountRuleAdmin(admin.ModelAdmin):
form = DiscountRuleForm
和forms.py
class DiscountRuleForm(forms.ModelForm):
channel = forms.MultipleChoiceField(
widget=FilteredSelectMultiple('channels', False),
required=False,
)
class Meta:
model = DiscountRule
fields = '__all__'
绕着它玩
https://stackoverflow.com/questions/70892188
复制相似问题