Ограничение набора запросов иностранным ключом в django rest framework

Я много искал решение для этой проблемы и пробовал много решений, но никто не решил ее.

некоторые из решений, которые я пробовал: ограничить выбор иностранным ключом и использование CurrentUserDefault

проблема в том, что я пытаюсь ограничить выбор провайдера в зависимости от текущего пользователя, поскольку у каждого пользователя есть свои провайдеры

я попробовал этот код, но он выдает мне TypeError: Field 'id' expected a number but got CurrentUserDefault(),

class RideSerializer(serializers.ModelSerializer):

    invoice = InvoiceSerializer(required=False)
    duration = serializers.ReadOnlyField()
    riding_duration = serializers.ReadOnlyField()
    heading_duration = serializers.ReadOnlyField()
    earning_per_km = serializers.ReadOnlyField()
    earning_per_minute = serializers.ReadOnlyField()
    provider = serializers.PrimaryKeyRelatedField(
        queryset=User.objects.select_related(
            'driver_profile__team', 'company_profile__team').filter(
            Q(driver_profile__team__user=serializers.CurrentUserDefault()) |
            Q(Company_profile__team__user=serializers.CurrentUserDefault())),
        default=serializers.CurrentUserDefault())

    class Meta:
        model = Ride
        exclude = ['shift', ]
        read_only_fields = ['id', 'start_time', ]

Установите пустой queryset в определениях полей и переопределите его в пользовательском конструкторе. Более того, хорошей идеей будет переместить этот запрос в пользовательский менеджер моделей https://docs.djangoproject.com/en/4.1/topics/db/managers/.

  class RideSerializer(serializers.ModelSerializer):
    # ....
    provider = serializers.PrimaryKeyRelatedField(
        queryset=User.objects.none())

    def __init__(self, *args, **kwargs):
       super().__init__(*args, **kwargs)
       self.fields["provider"].queryset = User.objects.select_related(
            'driver_profile__team', 'company_profile__team').filter(
            Q(driver_profile__team__user=request.user) |
            Q(Company_profile__team__user=request.user))

    class Meta:
        model = Ride
        exclude = ['shift', ]
        read_only_fields = ['id', 'start_time', ]
Вернуться на верх