Изменение значения поля, если вход не находится в выборе 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 not value:
return None
for status, text in models.YourModel.review_status_choices:
if value.strip().lower() == text.lower():
return text
return None
Некоторые усовершенствования этого:
Рассмотрите возможность использования поля Choices в вашей модели. Затем вы можете использовать widget в вашем HTML, чтобы избежать дублирования.
Рассмотрите возможность передачи вариантов выбора в виджет с помощью конструктора для лучшего разделения логики. Это поможет вам повторно использовать виджет в других контекстах.
.Код выше не чувствителен к регистру, что может быть не то, что вам нужно.