Django условные обязательные поля - как в DRF, так и в Model.save
В моей модели есть type
атрибут и get_required_fields
метод.
get_required_fields
возвращает список необходимых полей на основе self.type
, который я затем использую в методе full_clean
для проверки модели перед сохранением
for field in self.get_required_fields():
if getattr(self, field, None) is None:
missing_fields.append(field) # todo append verbose_name
if missing_fields:
raise ValidationError({x: "Povinné pole pre daný druh" for x in missing_fields})
Проблема в том, что это не работает для сериализаторов моделей DRF. Я переопределил метод validate
таким образом:
def validate(self, attrs):
Income(**attrs).full_clean()
return super().validate(attrs)
Но потом я понял, что это не будет работать для метода PATCH
и, вероятно, также не будет работать для POST
с отсутствующими полями
Как я могу заставить его работать и для модели, и для DRF ModelSerializer
, используя тот же код, чтобы сохранить его DRY?