我可以在我的序列化程序中获取用户?
例如我有这个序列化器:
serializers.py
class ClientSearchSerializer(serializers.ModelSerializer):
client = serializers.SlugRelatedField(
many=False,
queryset=Client.objects.filter(user=????),
slug_field='id'
)
我可以从SlugRelatedField过滤我的查询集吗?
答案 0 :(得分:3)
CurrentUserDefault
应该适合你。
文档:http://www.django-rest-framework.org/api-guide/validators/#currentuserdefault
请注意:
为了使用它,'request'必须作为一部分提供 实例化序列化程序时的上下文字典。
如果您正在使用ModelViewSet
或任何需要serializer_class
的视图/视图集并自动为您初始化它,那么您不必担心这一点。
代码示例:
from rest_framework.fields import CurrentUserDefault
class ClientSearchSerializer(serializers.ModelSerializer):
client = serializers.SlugRelatedField(
many=False,
queryset=Client.objects.filter(user=CurrentUserDefault()),
slug_field='id'
)
答案 1 :(得分:1)
CurrentUserDefault()
是吸引用户的好方法。另一种选择是返回一个函数,该函数在视图的get_serializer_class
方法中返回一个序列化器类。这样你就可以提供self.request.user
作为函数的参数。
rest_views.py:
class DetailView(generics.RetrieveAPIView):
def get_serializer_class(self):
return get_client_search_serializer(user=self.request.user)
...
serializers.py:
def get_client_search_serializer(user):
class ClientSearchSerializer(serializers.ModelSerializer):
client = serializers.SlugRelatedField(
many=False,
queryset=Client.objects.filter(user=user),
slug_field='id'
)
return ClientSearchSerializer