首页 > 解决方案 > TypeError:get_object() 采用 1 个位置参数,但给出了 2 个 [18/May/2021 18:27:12] "GET /api/Oxyegn/ HTTP/1.1" 500 94676

问题描述

我想要做的是我提供选择字段,当我将该选择字段作为参数传递给 url 时,我试图获取所有帖子,例如:氧气、等离子等它们在我的选择字段中,用户必须在发布期间选择邮政。

我想获得 json 格式,每当我们向 api 发出请求时都会获得这种格式,并且我希望该信息基于我给出的选择字段,但出现错误。

休息 API 视图

class PostRestApi(APIView):
    def get_object(self, **kwargs):
        try:
            return Post.objects.get(help_type=kwargs.get('help_type'))
        except Post.DoesNotExist:
            raise Http404

    def get(self, request, **kwargs):
        posts = self.get_object(kwargs.get('help_type'))
        serializer = PostSerializer(posts)
        return Response(serializer.data)

> SERIALIZERS CLASS

class PostSerializer(serializers.Serializer):
    title = serializers.CharField(max_length = 100)
    content = serializers.CharField()
    date = serializers.DateTimeField(default=timezone.now) 
    help_type = serializers.CharField()
        

My Post Model

CHOICES = (
    ("1", "Plasma"),
    ("2", "Oxygen"),
    ("3", "Bed"),
    ("4", "Emergency")
)

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = models.TextField()
    date = models.DateTimeField(default=timezone.now) 
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    help_type = models.CharField(max_length=300, choices = CHOICES, null=True)

url

path('api/<str:help_type>/', PostRestApi.as_view(), name='post-api')

标签: djangodjango-rest-framework

解决方案


您的方法get_object只接受除位置参数之外的关键字参数self,因此而不是:

posts = self.get_object(kwargs.get('help_type'))

你应该写:

posts = self.get_object(help_type=kwargs.get('help_type'))

推荐阅读