我编写了一个视图集,它取决于端点:
ALLOWED_ENTITIES = {
'persons': [Person, PersonSerializer, '__all__'],
'locations': [Location, LocationSerializer, ('country', 'city', 'street')],
'institutes': [Institute, InstituteSerializer, ('number', 'name_short', 'mail_domain')],
}
class EntityViewSet(viewsets.ModelViewSet):
filter_backends = [DjangoFilterBackend]
filterset_fields = '__all__' #should be ALLOWED_ENTITIES[self.kwargs['entity_name']][2]
def get_queryset(self):
model = ALLOWED_ENTITIES[self.kwargs['entity_name']][0]
return model.objects.all()
def get_serializer_class(self):
serializer = ALLOWED_ENTITIES[self.kwargs['entity_name']][1]
return serializer
URL.py:
urlpatterns = [
path('', RedirectView.as_view(url=reverse_lazy('aim:api-root'))),
url(r'^api/(?P<entity_name>\w+)', EntityListView.as_view({'get': 'list'})),
url(r'^/admin/', admin.site.urls),
]
当我转到/api/persons时,它会显示带有Person模型和PersonSerializer的viewset,这与预期的一样
但是问题是,我不知道如何定义filterset_fields = ALLOWED_ENTITIES[self.kwargs['entity_name']][2]
,我不能使用filterset_fields = '__all__'
,因为我得到了以下错误:Unsupported lookup 'icontains' for field 'aim.Department.parent'.
,其中'aim.Department.parent'
是ForeignKey。也许有人知道如何动态定义filterset_fields
先谢谢你
我找到了答案,
filterset_fields
可以在get_queryset
中被覆盖:相关问题 更多 >
编程相关推荐