Django restframework попытка использования djoser для создания нескольких моделей получает неожиданный аргумент в виде ключевого слова

Я новичок в django rest-framework и Djoser и учусь, пытаюсь создать пользователя с профилем, используя UserCreateSerializer в Djoser.

Я следовал куче руководств, чтобы создать Serializer с двумя моделями и при попытке создать пользователя в браузере api заканчивается: get unexpected keyword argument in the template, я знаю, что означает ошибка, но я не знаю, как как мне это реализовать или что я сделал не так. вот моя модель:

from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _


class User(AbstractUser):
    account_Option = (
        ('P', 'is_something'),
        ('L', 'is_somethingelse'),
    )
    ac_type = models.CharField(_("Status"),
                               max_length=1,
                               choices=account_Option,
                               default='P',
                               help_text=_('account Option'))


class MyClass(models.Model):
    user = models.OneToOneField(User, on_delete=models.PROTECT, editable=False)

    my_field = models.CharField(help_text=_('Enter your...'),
                                max_length=10,
                                unique=True,
                                null=True,
                                blank=True, )

и сериализаторы:

from djoser.serializers import UserSerializer as BaseUserSerializer, UserCreateSerializer as BaseUserCreateSerializer
from rest_framework import serializers
from django.conf import settings
from core.models import MyClass
User = settings.AUTH_USER_MODEL


class MyClassSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyClass
        fields = ['my_field']


class UserCreateSerializer(BaseUserCreateSerializer):
    profile = MyClassSerializer()

    class Meta(BaseUserCreateSerializer.Meta):
        fields = ['id', 'username', 'password', 'email',
                  'first_name', 'last_name', 'profile']

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        # User_model = self.User.objects.create(**validated_data)
        User_model = User.objects.create(**validated_data)
        new_profile = self.profile.objects.create(
            user=User_model, **profile_data)
        return User_model


class UserSerializer(BaseUserSerializer):
    class Meta(BaseUserSerializer.Meta):
        fields = ['id', 'username', 'email',
                  'first_name', 'last_name', ]

В настройках, настройте djoser следующим образом:

REST_FRAMEWORK = {
    'COERCE_DECIMAL_TO_STRING': False,
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}
DJOSER = {
    'SERIALIZERS': {
        'user_create': 'core.serializers.UserCreateSerializer',
        # 'current_user': 'core.serializers.UserSerializer',
    }
}

а при попытке отправить сообщение через браузерный api я получаю:

TypeError at /api/v1/users/

User() got an unexpected keyword argument 'profile'

Request Method:     POST
Request URL:    http://127.0.0.1:8000/api/v1/users/
Django Version:     3.1
Exception Type:     TypeError
Exception Value: User() got an unexpected keyword argument 'profile'

я искал решение, я не нашел ни одного, которое помогло бы, и пробовал вещи, которые я не думаю, что они имеют отношение к проблеме, очевидно, это должно быть что-то простое, что я упускаю, так что любая помощь будет оценена по достоинству.

Вернуться на верх