Как добавить пользовательские поля в файл serializer.py, наследующий от User Model Python Django
Я разрабатываю свой бэкенд на Python Django, а фронтенд на React-Native (еще не интегрирован). Я в основном следовал учебнику, и парень не использовал models.py для инициализации базы данных. Вместо этого он сделал все через serializers.py, унаследовав встроенную модель User от Django.
Проблема в том, что позже я понял, что у меня есть еще 4 поля (dob, gender, address, contact_no) на моей странице регистрации во фронтенде. Они не являются частью полей по умолчанию в модели User. Я видел кучу решений, но все они требуют от меня слишком большой переделки кода, а я слишком далеко зашел, чтобы это делать. Я реализовал регистрацию, проверку электронной почты и вход.
Есть ли у кого-нибудь решение, которое позволит мне использовать мой текущий код и включить пользовательские поля? Добавляю свой код ниже для справки:
файл models.py:
from django.db import models
from django.contrib.auth.models import User
class VerificatonToken(models.Model):
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='token')
verification_token = models.CharField(
max_length=256, blank=True, null=True)
файл 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
from .models import VerificatonToken
class TokenSerializer(serializers.ModelSerializer):
class Meta:
model = VerificatonToken
fields = ('user', 'verification_token',)
class PatientSerializer(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
# )
# gender = serializers.CharField(
# 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',
'is_active',
# 'DOB',
# 'address',
# 'contactNo',
'id'
)
файлviews.py:
Есть ли способ настроить существующую таблицу auth_user, изменив код PatientSerializer
в файле serializers.py?