Как я могу искать во всей моей модели Users пользователей, у которых уже есть запрашиваемый email/телефон?

Я новичок в rest framework, поэтому простите меня, если это очевидный ответ. Я использую сериализаторы с querysets в моих представлениях.

Все заблокировано с помощью JWT-аута от Firebase

Какой лучший способ поиска в моей базе данных пользователя, имеющего определенный email или телефон, и возвращения JSON-ответа True или False в зависимости от того, существует ли этот email / телефон уже в базе данных?

Что я пробовал до сих пор...

class getuserid(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = GetUserIdSerializer
    lookup_field = 'phone'

class GetUserIdSerializer(serializers.ModelSerializer):    
    class Meta:
        model=UserProfile
        fields=['user']

Проблема с этим методом заключается в том, что если я использую JWT, который не связан с пользователем, имеющим этот номер телефона в своей модели базы данных, я получаю ошибку invalid token error/forbidden.

Очевидно, что это не очень безопасный способ сделать это, в любом случае, даже если бы rest framework позволил мне это сделать.

Вот сериализатор, в котором я создаю профиль пользователя в моей базе данных...

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model=UserProfile
        fields=['company','email','name','phone','image','account_type','password','sub_user_of','sub_pending','products_read','products_write','restock_read','restock_write','expenses_read','expenses_write','banking_read','banking_write','admins']

class UserSerializer(serializers.ModelSerializer):    
    userprofile = UserProfileSerializer()

    def update(self, instance,validated_data):
        if(not instance.username == self.context['request'].user.username):
            raise exceptions.PermissionDenied('You do not have permission to update')
        profile_data = validated_data.pop('userprofile')
        if(not hasattr(instance,'userprofile')):
            instance.userprofile = UserProfile.objects.create(user=instance,**profile_data)
        else:
            instance.userprofile.company = profile_data["company"]
            instance.userprofile.email = profile_data["email"]
            instance.userprofile.name = profile_data["name"]
            instance.userprofile.phone = profile_data["phone"]
            instance.userprofile.account_type = profile_data["account_type"]
            instance.userprofile.password = profile_data["password"]
            instance.userprofile.save()
        instance.first_name = validated_data.get('first_name',instance.first_name)
        instance.last_name = validated_data.get('last_name',instance.last_name)
        instance.email = validated_data.get('email',instance.email)
        instance.save()
        return instance
    class Meta:
        model = User
        fields = ['last_name','first_name','userprofile']

Что я могу добавить к этому, чтобы выполнить поиск по всей моей модели UserProfile для пользователей, которые уже имеют указанные email и телефон?

Это оказалось намного проще, чем я думал...

Я не думал, что это позволит мне запросить всю базу данных, не уверен, почему я так думал, :)

Просто добавьте это в сериализатор...

if not profile_data["email"] == instance.userprofile.email:
            email_check = UserProfile.objects.filter(email=profile_data["email"])
            if email_check:
                raise exceptions.PermissionDenied('Email exists')
        if not profile_data["phone"] == instance.userprofile.phone:
            phone_check = UserProfile.objects.filter(phone=profile_data["phone"])
            if phone_check:
                raise exceptions.PermissionDenied('Phone exists')
Вернуться на верх