Ограничение набора запросов иностранным ключом в 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', ]