Как запретить DRF ModelSerializer использовать значение поля модели по умолчанию?

Я столкнулся с этой странной ошибкой(?) с BooleanField. При частичном_обновлении сериализатор всегда устанавливает все булевы значения в false, если они не установлены в запросе.

Мой models.py

class User(AbstractUser):
    agree_email = BooleanField(blank=True)
    agree_sms = BooleanField(blank=True)

serializers.py

class UserChangeSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "first_name", "agree_email", "agree_sms" 

Когда я пытаюсь установить значение agree_email в True - оно подтверждается как {'agree_email': True, 'agree_sms': False}, а если я пытаюсь установить значение agree_sms в true - оно подтверждается как {'agree_email': False, 'agree_sms': True} и обновляет объект User соответственно.

Как предотвратить такое поведение DRF?

Возможно, вы можете установить текущее значение как значение по умолчанию, когда данные запроса не имеют этого поля.

class UserChangeSerializer(serializers.ModelSerializer):
    class Meta:
        model = AZUser
        fields = ("first_name", "agree_email", "agree_sms")
    def validate(self, attrs):
        if self.instance:
            attrs["agree_mail"] = attrs.get("agree_mail", self.instance.agree_mail)
            attrs["agree_sms"] = attrs.get("agree_sms", self.instance.agree_sms)
        return attrs

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