[英]django-rest-framework : restrict RelatedField queryset according to request
I have a model with a ForeignKey 我有一个带有ForeignKey的模型
models.py models.py
class B(models.Model):
user = models.ForeignKey(contrib.auth.User)
class A(models.Model):
b = models.ForeignKey(B)
serializers.py serializers.py
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = ['b']
views.py views.py
class AViewSet(iewsets.ModelViewSet):
queryset = A.objects.all()
serializer_class = ASerializer
Now what I want is to restrict the Ab
values to the B
instances owned by the currently logged-in user. 现在,我想要将
Ab
值限制为当前登录用户拥有的B
实例。
I know how to enforce that at saving-time, but I would like to only present the relevant queryset in the dropdown choice in the browsable API interface . 我知道如何在保存时强制执行该操作,但是我只想在可浏览API接口的下拉选项中显示相关的查询集 。
If one can define a queryset argument on the RelatedField , it's static and can't depend on the current request. 如果可以在RelatedField上定义queryset参数 ,则它是静态的,并且不依赖于当前请求。
Any ideas ? 有任何想法吗 ?
Well you could try overriding queryset in init of serializer. 好吧,您可以尝试在序列化程序的init中覆盖queryset。 something like
就像是
def __init__(self, *args, **kwargs):
super(MySerializerClass, self).__init__(*args, **kwargs)
if self.context.get('request', None):
field = self.fields.get('b')
field.queryset = field.queryset.filter(user=request.user)
Current user shall be accessible through self.context. 当前用户应可通过self.context访问。
You can modify the get_queryset: 您可以修改get_queryset:
class AViewSet(iewsets.ModelViewSet):
serializer_class = ASerializer
def get_queryset(self):
user = self.request.user
return A.objects.filter(b__user = user)
ref: http://www.django-rest-framework.org/api-guide/filtering/ 参考: http : //www.django-rest-framework.org/api-guide/filtering/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.