TypeError: метод () принимает 1 позиционный аргумент, но 2 были бы заданы, если бы я зарегистрировал api

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

мой register_api не может работать, если у меня есть view

 class RegistrationUsersApi(viewsets.ModelViewSet):
    permission_classes = [AllowAny]

    def get(self, request):
        queryset = User.objects.all()
        serializer = UserSerializerView(queryset, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer_class = SerializerUserRegistration(data=request.data)
        data={}
        if serializer_class.is_valid():
            new_user = serializer_class.save()
            data['response'] = 'Ура ты создал нового персонажа, героя, человека, или не создал?'
            data['email'] = new_user.email
            data['username'] = new_user.username
        else:
            serializer_class.errors
        return Response(data)
  

и у меня есть свой серилизатор

 class SerializerUserRegistration(serializers.ModelSerializer):

    password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'password', 'password2']
        extra_kwargs = {
            'password': {'write_only': True}
        }

    def save(self):
        user = User(
            email=self.validated_data['email'],
            username=self.validated_data['username'],
        )
        password = self.validated_data['password']
        password2 = self.validated_data['password2']

        if password != password2:
            raise serializers.ValidationError({'password': 'Password must match'})
        user.set_password(password)
        user.save()
        return user
  

и мою пользовательскую модель

 class User(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
    description = models.TextField(blank=True, null=True)
    location = models.CharField(max_length=30, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)
    is_organizer = models.BooleanField(default=False)
    info_car = models.CharField(max_length=30, blank=True, null=True)
    first_name = models.CharField(max_length=30, blank=True, null=True)
    second_name = models.CharField(max_length=30, blank=True, null=True)

    def __str__(self):
        return self.user.username
  

url-адреса

 urlpatterns = [
    path('', views.MainIndexView.as_view(), name='index'),
    path('registration/', views.RegistrationUsersApi, name='registration')
]
  

и мои корневые URL-адреса

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('mainapp.urls')),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path("api/accounts/", include("mainapp.urls")),
]
  

почему мой регистр не работает. я пытался опубликовать с помощью postman
почему Python сообщает мне, что я дал ему два аргумента, когда я дал только один? и почему у меня эта проблема, я не знаю

Комментарии:

1. Для какой строки вы получаете ошибку?

2. когда я писал вопрос, я заметил, что у меня неправильный вид, я не добавил as_view () к URL-адресам. путь. Но это не помогает до конца, следующую ошибку я получаю django.core.exceptions. Неправильно сконфигурировано: имя поля username недопустимо для модели User .

Ответ №1:

когда я писал вопрос, я заметил, что у меня неправильный вид, не добавил as_view () URL-адреса. путь и

Моя пользовательская модель имела то же имя, что и стандартная, что вызвало проблемы, я удалил свою модель и начал использовать стандартную, и у меня все начало работать