【发布时间】:2020-09-15 08:49:41
【问题描述】:
我写了一个视图集,它依赖于端点:
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
urls.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 Model 和 PersonSerializer 的视图集。
但问题是,我不知道如何定义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。
提前谢谢你。
【问题讨论】:
标签: python python-3.x django django-filter django-filters