如何仅在django-rest-framework中获得仅主键的结果而不是所有结果?

时间:2020-09-03 13:47:21

标签: python django rest django-rest-framework django-rest-knox

在我的django应用程序中,我需要使用电话号码检查用户是否存在。使用电话号码和OTP登录。 我可以通过获取请求来检查用户是否存在

"/api/profiles/<primary key here>/".

但是如果我要求

"/api/profiles/"

我得到数据库中所有用户的列表。

如果需要,我需要我的应用不返回任何内容

"/api/profiles/"

和用户详细信息(如果要求)

"/api/profiles/<primary key here>/"

我该怎么做?

序列化器是基本模型序列化器


class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = [
            "id",
            "is_superuser",
            "fullname",
            "email",
            "is_staff",
            "is_active",
            # "birthdate",
            "phone_number",
            "created_at",
            "updated_at",
        ]

网址:


router = routers.DefaultRouter()
router.register(r"profiles", views.UserProfileViewSet)


urlpatterns = [
    path("admin", admin.site.urls),
    path("restauth/", include("rest_framework.urls", namespace="restauth")),
    path("api/", include(router.urls)),

观看次数:

class UserProfileViewSet(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码

from rest_framework import mixins

class UserProfileViewSet(viewsets.ViewSet, mixins.RetrieveModelMixin):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer

答案 1 :(得分:0)

使用序列化程序无法找到答案。 因此,我建立了一个基于函数的视图,该表单使用表单数据获取电话号码,并在每次提出请求并存在用户时将密码更新为随机的6位数otp。

检查用户

try:
    UserProfiles.objects.get(phone_number=request.POST["phone_number"]
    # generate otp
    return HttpResponse(otp)
except:
    return HttpResponse("user not found")