如何在django rest框架中过滤当前用户的queryset



class SalonCarDetailsSerializer(serializers.ModelSerializer):

salon = PrimaryKeyRelatedField(queryset=Salon.objects.filter(owner=?))
class Meta:
model = SalonCarDetails
fields = ["salon", "car", "price", "number_of_cars"]

CurrentUserDefault()不起作用

那么,您可以像这样编写您自己的PrimaryKeyRelated字段:

class SalonKeyRelatedField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
qs = super().get_queryset()
request = self.context.get('request')
return qs

则可以根据请求过滤qs。用户,它将只在POST和PUT请求时调用。然后可以将它包含在序列化器

salon = SalonKeyRelatedField()

别忘了在你的领域中包括沙龙

我希望我能看到你的views.py,但无论如何,我对它做了一些假设,并把它放在类实现场景。

#
### views.py
#
# Django native libraries
from rest_framework.serializers import Serializer
from rest_framework import viewsets, mixins, status
from django.db.models import Q
# your serializer and model
from .serializers import YourSalonCarSerializer
from .models import SalonCarDetails
class YourCustomViewSet(mixins.RetrieveModelMixin, 
mixins.ListModelMixin,
mixins.UpdateModelMixin, 
mixins.DestroyModelMixin,
viewsets.GenericViewSet):
queryset = SalonCarDetails.objects.all()
serializer_class = YourSalonCarSerializer
def get_queryset(self):
if self.request.user.is_anonymous:
return []
lookups = Q(user=self.request.user)
queryset  = self.queryset.filter(lookups)

最新更新