有什么办法可以让我们pass all the fields of a model to django filter backend
无需显式传递 search_fields 和 filter_fields 中的字段名称
我制作了一个通用视图集,它序列化传递给它的模型的所有字段,但我在对其应用通用过滤器时遇到问题
for eg,
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ('username', 'email')
在上面的代码中,我们显式地传递了search_fields
但在我的代码中,我无法显式传递字段,因为每次都可能传递不同的模型。
我认为这样做并不明智,因为某些字段可能会泄露敏感信息,但您可以尝试传递模型中的所有字段:
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.SearchFilter,)
search_fields = [f.name for f in User._meta.get_fields()]
这是文档 https://docs.djangoproject.com/en/1.10/ref/models/meta/#django.db.models.options.Options.get_fields用于使用get_fields
:
Options.get_fields(include_parents=True, include_hidden=False)[来源]
返回与模型关联的字段元组。get_fields()
接受两个参数,可用于控制哪些字段
回到:
-
包含父母
True
默认情况下。递归地包含在父级上定义的字段
类。如果设置为False
, get_fields()
只会搜索字段
直接在当前模型上声明。直接来自模型的字段
从抽象模型或代理类继承被认为是
本地的,而不是父级的。
-
包含隐藏
False
默认情况下。如果设置为True
, get_fields()
将要
包括用于支持其他字段功能的字段。这
还将包括任何具有related_name
(例如ManyToManyField
, or ForeignKey
)以“+”开头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)