Как настроить поля пользовательской модели по умолчанию 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'
Вернуться на верх