gpt4 book ai didi

django - 在 django 过滤器后端传递模型的所有字段

转载 作者:行者123 更新时间:2023-12-01 14:37:58 27 4
gpt4 key购买 nike

有什么方法可以将模型的所有字段传递给 django 过滤器后端,而无需显式传递 search_fields 和 filter_fields 中的字段名称

我已经制作了一个通用 View 集,它序列化了传递给它的模型的所有字段,但是我在向它应用通用过滤器时遇到了问题

例如,

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()]

Here are the docs使用 get_fields:

Options.get_fields(include_parents=True, include_hidden=False)[source]

Returns a tuple of fields associated with a model. get_fields() accepts two parameters that can be used to control which fields are returned:

  • include_parents True by default. Recursively includes fields defined on parent classes. If set to False, get_fields() will only search for fields declared directly on the current model. Fields from models that directly inherit from abstract models or proxy classes are considered to be local, not on the parent.
  • include_hidden False by default. If set to True, get_fields() will include fields that are used to back other field’s functionality. This will also include any fields that have a related_name (such as ManyToManyField, or ForeignKey) that start with a “+”.

关于django - 在 django 过滤器后端传递模型的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com