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'
я искал решение, я не нашел ни одного, которое помогло бы, и пробовал вещи, которые я не думаю, что они имеют отношение к проблеме, очевидно, это должно быть что-то простое, что я упускаю, так что любая помощь будет оценена по достоинству.