Для создания кастомной модели пользователя с дополнительными полями в Django, следует использовать `AbstractUser` или `AbstractBaseUser` в качестве базового класса. В вашем случае, с учетом того, что вы хотите добавить только несколько полей к существующей модели пользователя, проще всего использовать `AbstractUser`.
### Шаги для создания кастомной модели пользователя:
1. **Создайте кастомную модель пользователя**:
В вашем файле `models.py` создайте модель, которая будет наследовать от `AbstractUser`. Добавьте необходимые поля, такие как имя, фамилия и возраст.
```python
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
age = models.PositiveIntegerField(null=True, blank=True)
def __str__(self):
return self.username
```
2. **Обновите настройки Django**:
Укажите вашу кастомную модель пользователя в настройках Django. В файле `settings.py` добавьте:
```python
AUTH_USER_MODEL = 'your_app_name.CustomUser'
```
Не забудьте заменить `your_app_name` на имя вашего приложения.
3. **Миграции**:
После создания новой модели выполните миграции для обновления базы данных:
```bash
python manage.py makemigrations
python manage.py migrate
```
4. **Обновите сериализаторы**:
Теперь необходимо обновить сериалиаторы, чтобы они работали с вашей кастомной моделью пользователя:
```python
from .models import CustomUser, UserToken
from rest_framework import serializers
class UserRegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, min_length=8)
class Meta:
model = CustomUser # Используем кастомную модель пользователя
fields = ['username', 'email', 'password', 'first_name', 'last_name', 'age']
def create(self, validated_data):
user = CustomUser.objects.create_user(**validated_data)
UserToken.objects.create(user=user) # Создаем токен для пользователя
return user
```
5. **Создание токена**:
Модель `UserToken` уже правильно настроена для связи с пользователем через `OneToOneField`, так что изменений здесь вносить не нужно.
6. **Адаптация логики входа и выхода**:
Также убедитесь, что ваш код для логики входа и выхода из системы использует кастомную модель пользователя.
### Пример кода для регистрации пользователя:
Теперь, когда вы уже настроили кастомную модель пользователя и сериализаторы, ваш код для регистрации пользователей, входа и управления токенами может выглядеть следующим образом:
```python
# views.py
from rest_framework import generics
from .serializers import UserRegisterSerializer, UserLoginSerializer
class UserRegisterView(generics.CreateAPIView):
serializer_class = UserRegisterSerializer
```
Таким образом, вы создали кастомную модель пользователя с дополнительными полями и установили связь с токеном. Не забудьте протестировать функциональность приложения, чтобы убедиться, что все работает корректно.