【问题标题】:Pass a value to an api and return a specific object将值传递给 api 并返回特定对象
【发布时间】:2021-06-02 21:05:14
【问题描述】:

我在哪里创建了一个 api

#urls.py

router = DefaultRouter()
router.register('login', GetUserViewSet, basename='get_user')

urlpatterns = [
  path('', include(router.urls)),
]

#views.py

class GetUserViewSet(viewsets.ReadOnlyModelViewSet):
  queryset = User.objects.all()
  serializer_class = GetProfileSerializer

#serializers.py

class GetProfileSerializer(serializers.ModelSerializer):

    class Meta:
    model = User
    exclude = ('password', 'groups', 'user_permissions')

当我点击“http://localhost:8000/api/login/”时,上面的代码返回用户列表 以及当我点击“http://localhost:8000/api/login/1/”时的特定用户。

这里我想将'mobile_number'传递给api并返回唯一具有手机号码的用户。

我通过将 get_queryset() 添加到视图中来实现它,如下所示。

#views.py 
class GetUserViewSet(viewsets.ReadOnlyModelViewSet):
  queryset = User.objects.all()
  serializer_class = GetProfileSerializer

  def get_queryset(self):
    mobile_number = self.request.query_params.get('mobile_number')
    queryset = User.objects.filter(mobile_number=mobile_number)
    return queryset

但上面的代码是在一个数组中返回对象。

我遵循下面给出的常见响应格式

{
  "status": true,
  "message": "Successfully registered your account.",
  "data": {
    "id": 1,
    "first_name": "User",
    "last_name": "U",
    "email": "user@gmail.com",
    "dial_code_id": "91",
    "mobile_number": "9876543211",
  }
}

而我无法通过这个 get_queryset() 实现这一点。

请建议我实现这一目标的最佳方法。

【问题讨论】:

    标签: django django-models django-rest-framework django-serializer django-rest-viewsets


    【解决方案1】:

    .first() 添加到过滤器的末尾以返回查询集中的第一个对象。

    【讨论】:

    • 不工作。收到错误:/api/login/ 'User' 对象的 TypeError 不可下标
    • 不要为它使用get QuerySet方法,它期望在一个对象是一个对象的地方返回一个QuerySet
    • 你能分享一个示例代码吗?我对此有点困惑。
    • 抱歉,我需要您向我展示更多您想要做的事情。您在哪里处理查询集中的数据以在字典中发送?或者只是你在哪里调用 def get_queryset(self):
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多