嗨,我有一个正在创建的视图集。我想越过get functino并获取具有已过滤参数的所有记录,该参数已传递到get视图中。我还希望能够完成其余的Crud功能-GET POST PUT DELETE-并使用通过url传递的参数作为POST和UPDATE的参数。
现在,当我传入参数时,而不是过滤返回的数据,这没有给我找到细节,这不是我想要的。我希望它可用作我从数据库取回的所有记录的辅助筛选器。
代码如下:
视图集
class PreferenceUserViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all().filter(user_id=1)
serializer_class = PreferenceSerializer
class PreferenceNamespaceViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all().filter(user_id=1)
serializer_class = PreferenceSerializer
def get_permissions(self):
if self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated]
else:
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
@permission_classes((IsAuthenticated))
def list(self, request, namespace=None):
# switch user_id value with logged in users id
queryset = Preference.objects.all().filter(user_id=1, namespace=namespace)
serializer = PreferenceSerializer(queryset, many=True)
return Response(serializer.data)
网址:
path('preferences/<str:namespace>/', PreferenceNamespaceViewSet.as_view({
'get':'list'
})),
path('users/<int:pk>/stacks/', person_stack, name='user-stacks'),
我想将namepsace
用作对GET中返回的所有数据的辅助过滤器。我还想将其用作创建新的首选项时可以输入的数据的一部分。
**我也想对第三个潜在参数做同样的事情,像这样... **
潜在的第三个参数:
urlpatterns = [
path('preferences/<str:namespace>/<str:path>', PreferencePathViewSet.as_view({
'get':'list'
})),
path('preferences/<str:namespace>/', PreferenceNamespaceViewSet.as_view({
'get':'list'
})),
path('users/<int:pk>/stacks/', person_stack, name='user-stacks'),
]
答案 0 :(得分:0)
我认为您不应该将名称空间添加为url参数,而是可以使用URL querystring
来获取名称空间信息(以及其他参数)。例如:
# URL
path('preferences/', PreferencePathViewSet.as_view({
'get':'list'
})
),
# view
class PreferenceNamespaceViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all().filter(user_id=1)
serializer_class = PreferenceSerializer
def get_permissions(self):
if self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated]
else:
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
@permission_classes((IsAuthenticated))
def list(self, request):
queryset = Preference.objects.all()
namespace = request.GET.get('namespace', None)
if namespace:
queryset = queryset.filter(user_id=1, namespace=namespace)
serializer = PreferenceSerializer(queryset, many=True)
return Response(serializer.data)