【发布时间】:2017-06-13 13:44:11
【问题描述】:
我有一个与许多模型相关的模型,如下所示:
class Father:
son = # Foreign key to Son model
class Son:
@property
def son_daughters:
if ... :
obj = TypeA.objects.get(...)
elif ... :
obj = TypeB.objects.get(...)
else:
obj = TypeC.objects.get(...)
return obj
我想从女儿姓名或类型中获取父亲数据。我有这个过滤器类,我需要发送两个与女儿相关的查询集参数,以便获取女儿 ID 并将其作为过滤器应用于父亲。这是我的过滤器类:
class FatherFilter(django_filters.rest_framework.FilterSet):
def daughter(self, method_name, args, **kwargs):
print(method_name, args, kwargs)
...
daughter_id = django_filters.NumberFilter(method=daughter)
但是当我调用这个端点时,我只得到一个查询参数而不是全部。
有没有办法在这个方法中获取查询参数而不是一个?
提前致谢。
【问题讨论】:
-
这似乎与 DRF 无关。 django-filters 是一个完全独立的包。
-
Django Rest 将 django-filters 实现为一个包来使用 Django Filter 类,请验证:django-rest-framework.org/api-guide/filtering/…
-
对于历史/上下文,django-filter 是一个完全独立的包。但是,DRF 过去提供了一个“过滤器后端”,使您可以轻松地将 django-filter 与 DRF 集成。此过滤器后端已被移至
django_filters.rest_framework子包。您在这里遇到的问题与 DRF 没有直接关系。 -
目前尚不清楚您在这里尝试做什么。您能否提供一个示例 URL 或查询字符串以及应该由过滤器集生成的查询集?至于您的问题,您可以直接访问
self.data,尽管我不建议这样做,因为您会绕过验证。 -
谢谢,@Sherpa。抱歉,我不够清楚,我发布了此代码作为所需结果的示例,但真正的代码依赖于许多模型和视图,这些模型和视图对于理解最终结果可能更复杂。我找到了实现这一目标的方法,虽然它可能不是最好的方法,但它现在有效。我将在下面发布答案。
标签: python django django-rest-framework django-filter