如果输入不在选择中,则更改字段的值 Django ImportExportModelAdmin
Change value of field if input is not in choices Django ImportExportModelAdmin
我以这个模型字段为例:
compliance_approve_status = models.CharField(max_length=200, blank=True, null=True, default=None, choices=review_status_choices)
有这些选择:
for_review = 'FOR REVIEW'
approved = 'APPROVED'
rejected = 'REJECTED'
review_status_choices = [(for_review, 'FOR REVIEW'), (approved, 'APPROVED'), (rejected, 'REJECTED')]
带有选择的字段的简化版本。
我希望能够设置一个默认值,如果用户从文件导入并放入 'FOR REVIEW'、'APPROVED' 或 'REJECTED' 以外的内容,或者是NULL
,默认为None
。我以为添加一个 default=None
就可以了,但它接受 Django 的 ImportExportModelAdmin
.
中的其他值
像这样的东西应该可以工作(未测试):
class ComplianceStatusWidget(widgets.CharWidget):
def clean(self, value, row=None, *args, **kwargs):
if value:
for status, text in models.YourModel.review_status_choices:
if value.strip().lower() == text.lower():
return text
return None
对此的一些改进:
考虑在 HTML 中使用 widget 以避免重复。
考虑使用构造函数将选择传递到小部件,以更好地分离逻辑。这将帮助您在其他上下文中重用该小部件。
上面的代码不区分大小写,这可能不是您想要的。
我以这个模型字段为例:
compliance_approve_status = models.CharField(max_length=200, blank=True, null=True, default=None, choices=review_status_choices)
有这些选择:
for_review = 'FOR REVIEW'
approved = 'APPROVED'
rejected = 'REJECTED'
review_status_choices = [(for_review, 'FOR REVIEW'), (approved, 'APPROVED'), (rejected, 'REJECTED')]
带有选择的字段的简化版本。
我希望能够设置一个默认值,如果用户从文件导入并放入 'FOR REVIEW'、'APPROVED' 或 'REJECTED' 以外的内容,或者是NULL
,默认为None
。我以为添加一个 default=None
就可以了,但它接受 Django 的 ImportExportModelAdmin
.
像这样的东西应该可以工作(未测试):
class ComplianceStatusWidget(widgets.CharWidget):
def clean(self, value, row=None, *args, **kwargs):
if value:
for status, text in models.YourModel.review_status_choices:
if value.strip().lower() == text.lower():
return text
return None
对此的一些改进:
考虑在 HTML 中使用 widget 以避免重复。
考虑使用构造函数将选择传递到小部件,以更好地分离逻辑。这将帮助您在其他上下文中重用该小部件。
上面的代码不区分大小写,这可能不是您想要的。