我有一个带有ForeignKey的模型
models.py
class B(models.Model):
user = models.ForeignKey(contrib.auth.User)
class A(models.Model):
b = models.ForeignKey(B)
serializers.py
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = ['b']
views.py
class AViewSet(iewsets.ModelViewSet):
queryset = A.objects.all()
serializer_class = ASerializer
现在我想要的是将A.b
值限制为当前登录用户拥有的B
个实例。
我知道如何在保存时强制执行此操作,但我只想在browsable API interface的下拉选项中显示相关的查询集。
如果 RelatedField 上有人define a queryset argument,则它是静态的,不能依赖当前的请求。
有什么想法吗?
答案 0 :(得分:2)
您可以尝试在序列化程序的 init 中覆盖查询集。
之类的东西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)
当前用户可以通过self.context访问。
答案 1 :(得分:-1)
您可以修改get_queryset:
class AViewSet(iewsets.ModelViewSet):
serializer_class = ASerializer
def get_queryset(self):
user = self.request.user
return A.objects.filter(b__user = user)
参考:http://www.django-rest-framework.org/api-guide/filtering/