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?

Вернуться на верх