Как передать значение true или false в сериализаторе django rest framework
вот мой код сериализатора;
class RegisterSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(required=True, write_only=True)
password2 = serializers.CharField(required=True, write_only=True)
email = serializers.EmailField(required=True)
is_company = serializers.BooleanField(required=False)
class Meta:
model = CustomUser
fields = [
"email",
"first_name",
"last_name",
"is_company",
"profile_pic",
"password1",
"password2",
]
def validate_email(self, email):
email = get_adapter().clean_email(email)
if allauth_settings.UNIQUE_EMAIL:
if email and email_address_exists(email):
raise serializers.ValidationError(
("A user is already registered with this e-mail address.",)
)
return email
def validate_password1(self, password):
return get_adapter().clean_password(password)
def validate(self, data):
if data["password1"] != data["password2"]:
raise serializers.ValidationError(
("The two password fields didn't match.",)
)
return data
def get_cleaned_data(self):
return {
"first_name": self.validated_data.get("first_name", ""),
"last_name": self.validated_data.get("last_name", ""),
"is_company": self.validated_data.get("is_company", ""),
"profile_pic": self.validated_data.get("profile_pic", ""),
"password1": self.validated_data.get("password1", ""),
"email": self.validated_data.get("email", ""),
}
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
if self.cleaned_data.get("profile_pic"):
user.profile_pic = self.cleaned_data.get("profile_pic")
setup_user_email(request, user, [])
user.save()
return user
В основном я пытаюсь сделать следующее: когда я делаю запрос с форматом json в чем-то вроде postman;
{
"first_name": firstname,
"last_name": lastname,
"email": myemail,
"password1": password1,
"password2": password2,
"is_company": true
}
когда я передаю true в is_company
, я хочу, чтобы это изменило значение is_company
на true; но я продолжаю получать false. Я пробовал использовать данные формы, но все равно получаю false.
Я также пробовал передавать 'true'
или 'True'
, но все равно получаю false.
Обратите внимание, что я использую django-rest-auth для аутентификации, и я передаю RegisterSerializer
настройки django-rest-auth в моем settings.py
;
REST_AUTH_REGISTER_SERIALIZERS = {
"REGISTER_SERIALIZER": "users.api.serializer.RegisterSerializer",
}
Способ, которым я смог решить эту проблему, заключается в преобразовании данных, поступающих от фронтенда или постмана, в чистые данные. Так что вместо чего-то вроде этого;
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
if self.cleaned_data.get("profile_pic"):
user.profile_pic = self.cleaned_data.get("profile_pic")
setup_user_email(request, user, [])
user.save()
return user
Я сделал это;
def save(self, request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request, user, self)
if self.cleaned_data.get("profile_pic"):
user.profile_pic = self.cleaned_data.get("profile_pic")
# this is new
if self.cleaned_data.get("is_company"):
user.is_company = self.cleaned_data.get("is_company")
setup_user_email(request, user, [])
user.save()
return user