Как запретить 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