我有一个模型DRF - 限制对象返回给业主
class Widget(models.Model):
title = models.CharField(max_length=100)
description = models.CharField(max_length=1024)
username = models.CharField(max_length=50)
code = models.CharField(max_length=1024)
owner = models.ForeignKey('MyappUser', related_name='Myapp_owner')
list = models.ForeignKey('WidgetList')
我希望能够做到调用特定视图时,什么 -
class WidgetList(generics.ListCreateAPIView):
queryset = Widget.objects.all()
serializer_class = WidgetSerializer
filter_class = WidgetFilter
我只是想拥有的小工具。用户登录
我现在的过滤器 -
class WidgetFilter(django_filters.FilterSet):
owner = django_filters.NumberFilter(name="owner", lookup_type="exact")
list = django_filters.NumberFilter(name="list", lookup_type="exact")
class Meta:
model = Widget
fields = ['owner', 'list']
现在我必须做/api/widgets/?owner=3&list=5
但是这并不妨碍另一个用户查看小部件。
我以前一直用做以下,但它打破了我做一个过滤器类的能力 -
class WidgetList(generics.ListCreateAPIView):
queryset = Widget.objects.all()
serializer_class = WidgetSerializer
def get(self, request):
if request.user:
queryset = self.get_queryset().filter(owner=request.user)
for object in queryset:
object.code = decrypt_code(masterkey,
personalkey,
object.code)
else:
queryset = self.get_queryset()
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = WidgetSerializer(queryset, many=True)
return Response(serializer.data)
我希望能够做的是,如果我有这样一个名单 -
Jane
Widget 1
Widget List ABC
Jane
Widget 2
Widget List DEF (which is 3)
Mike (which is 3)
Widget 3
Widget List ABC (which is 5)
Alfred
Widget 4
Widget List ABC
如果我这样做/api/widgets/?list=5
如果我登录的迈克,我只希望看到的Widget 3
重写'get_queryset'并保留filter_class。 – masnun
解释如何?我一直在尝试15种不同的东西,但没有运气。 – whoisearth
撰写详细的答案。 – masnun