首页 > 解决方案 > TypeError:method() 接受 1 个位置参数,但如果我注册了 api,则会给出 2 个

问题描述

如果我有视图,我的 register_api 不能工作

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

网址

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

和我的根网址

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")),
]

为什么我的寄存器不起作用。我试图与邮递员一起发帖,为什么 Python 告诉我我给了它两个参数,而我只给了一个参数?为什么我有这个问题我不知道

标签: pythondjangodjango-rest-framework

解决方案


当我写这个问题时,我注意到我的观点有误,没有添加as_view ()网址。路径和

我的用户模型与标准模型同名,这导致了问题,我删除了模型并开始使用标准模型,一切都开始为我工作


推荐阅读