Как настроить поля пользовательской модели по умолчанию django
Я хочу расширить модель пользователя Django, чтобы включить поля DOB, Gender, Address и PhoneNo.
Вот как выглядит мой файл Serializers.py:
from rest_framework import serializers
from django.contrib.auth.models import User
from rest_framework.validators import UniqueValidator
from rest_framework_jwt.settings import api_settings
class UserSerializer(serializers.ModelSerializer):
token = serializers.SerializerMethodField()
email = serializers.EmailField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
username = serializers.CharField(
required=True,
max_length=32,
validators=[UniqueValidator(queryset=User.objects.all())]
)
first_name = serializers.CharField(
required=True,
max_length=32
)
last_name = serializers.CharField(
required=True,
max_length=32
)
# DOB = serializers.DateField(
# required=True
# )
# address = serializers.CharField(
# required=True,
# max_length=60
# )
# contactNo = serializers.IntegerField(
# required=True,
# # max_length=11
# )
password = serializers.CharField(
required=True,
min_length=8,
write_only=True
)
def create(self, validated_data):
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
def get_token(self, obj):
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(obj)
token = jwt_encode_handler(payload)
return token
class Meta:
model = User
fields = (
'token',
'username',
'password',
'first_name',
'last_name',
'email',
# 'DOB',
# 'gender',
# 'address',
# 'contactNo',
'id'
)
Как вы видите, я пытался сделать это через него, но это не сработало... Я также пытался использовать OneToOneField() в файле models.py для включения дополнительных полей (он был пуст и не содержал кода), но это тоже не сработало. Есть предложения?
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
#customuser inherits every field from User model
#you can add fields like this:
phone_number = models.CharField(max_length=12, default='', null=True, blank=True)
И не забудьте добавить это в файл settings.py:
AUTH_USER_MODEL = 'your_app_name.CustomUser'