I am using Djoser and i have role field in user model
as i integrated the role i cant signup a user. it works with without role
but role field is import to update.
in api body
{ "first_name":"test", "last_name":"data", "email":"[email protected]", "phone_number":"9876543210", "password":"pass@123", "re_password":"pass@123", "role":2 }
i get thisAttributeError at /api/users/ 'dict' object has no attribute 'role'
in social auth i cant get the first and last name
My Serializers
`
from .models import User
from rest_framework import serializers
from djoser.serializers import UserCreateSerializer
class SignupSerializer(UserCreateSerializer):
class Meta(UserCreateSerializer.Meta):
model = User
fields = ("first_name", "last_name", "email", "password", "role")
extra_kwargs = {
"first_name": {"required": True, "allow_blank": False},
"last_name": {"required": False, "allow_blank": True},
"email": {"required": True, "allow_blank": False},
"password": {"required": True, "allow_blank": False, "min_length": 6},
"role": {"required": False, "allow_blank": True},
}
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ("id", "first_name", "last_name", "email", "role")
`
**Djoser and social auth settings **
`
DJOSER = {
“SERIALIZERS”: {
“user_create”: “accounts.serializers.SignupSerializer”,
“current_user”: “accounts.serializers.UserSerializer”,
“user”: “accounts.serializers.UserSerializer”,
},
“PASSWORD_RESET_CONFIRM_URL”: “password-reset/{uid}/{token}”,
# “USERNAME_RESET_CONFIRM_URL”: “username-reset/{uid}/{token}”,
“SEND_ACTIVATION_EMAIL”: True,
“ACTIVATION_URL”: “activation/{uid}/{token}”,
“USER_CREATE_PASSWORD_RETYPE”: False,
“PASSWORD_RESET_CONFIRM_RETYPE”: True,
“LOGOUT_ON_PASSWORD_CHANGE”: True,
“PASSWORD_RESET_SHOW_EMAIL_NOT_FOUND”: True,
“TOKEN_MODEL”: None,
“SOCIAL_AUTH_TOKEN_STRATEGY”: “djoser.social.token.jwt.TokenStrategy”,
“SOCIAL_AUTH_ALLOWED_REDIRECT_URIS”: config(“REDIRECT_URLS”).split(“,”),
}
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = config(“GOOGLE_CLIENT_ID”)
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = config(“GOOGLE_SECRET”)
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
“https://www.googleapis.com/auth/userinfo.email”,
“https://www.googleapis.com/auth/userinfo.profile”,
“openid”,
]
SOCIAL_AUTH_GOOGLE_OAUTH2_EXTRA_DATA = ["first_name", "last_name"]
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ["first_name", "last_name"]
`
Model
class User(AbstractBaseUser): CLIENT = 1 STUDIO = 2 ADMIN = 3 ROLE_CHOICES = [ (CLIENT, "client"), (STUDIO, "studio"), (ADMIN, "admin"), ] id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) first_name = models.CharField(max_length=50) role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, default=CLIENT)