cделать поля required django-rest-framework
Расширил модель User
class CustomUser(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
ROLE_CHOICES = [
('U', 'User'),
('M', 'Moderator'),
('A', 'Admin'),
]
role = models.CharField(max_length=1, choices=ROLE_CHOICES, default='U')
REQUIRED_FIELDS = ['email', 'username']
Есть вот такой url
path('v1/auth/email/', csrf_exempt(views.email))
Вью
@api_view(['POST'])
def email(requests):
email = requests.POST['email']
user = User.objects.get_or_create(username=email, email=email)[0]
confirmation_code = default_token_generator.make_token(user)
send_mail('Подтверждение регистрации', f'Пожалуйста, сохраните этот код :
{confirmation_code},'[email protected]',
[email], fail_silently=False)
return JsonResponse({'email':email})
как сделать так что бы поля email и username были оба required ? По умолчанию только username required. Можно ли сделать это наследуясь от AbstractUser или надо наследоваться от AbstractBaseUser ? Можно ли задать требования reqiured на уровне сериализатора ?
Ответы (1 шт):
Автор решения: Narnik Gamarnik
→ Ссылка
Достаточно удобно управлять полями в ModelSerializer:
from rest_framework.serializers import ModelSerializer
class CustomUserSerializer(ModelSerializer:
fields = ['email', 'phone_number']
extra_kwargs = {
'email': {'required': True},
'username': {'read_only': True}
}
class Meta:
model = CustomUser