【发布时间】:2020-09-11 14:57:02
【问题描述】:
我将 django-filter 与 DRF 一起使用。我有一个favourite-model,它通过 GenericRelation 链接到其他几个模型。
为了过滤具有 favourite-flag 的条目,我创建了一个自定义 FavouriteFilter,并将其添加到相应的模型中。我想查询相应模型的content_type_id,以限制来自Favourite 的结果。但是,我不知道如何将model 传递给FavouriteFilter 中的过滤器方法。
这里有一个代码 sn-p 来说明这个问题:
class ProjectFilter(BaseFilter):
favourite_only = FavouriteFilter()
class FavouriteFilter(django_filters.BooleanFilter):
"""
A custom filter which returns a users favourites of an element
"""
def __init__(self, *args, **kwargs):
# gettext_lazy breaks the OpenAPI generation => use gettext instead
kwargs['label'] = gettext("My favourites")
super(FavouriteFilter, self).__init__(*args, **kwargs)
def filter(self, qs, value):
if value == True:
user = get_current_user()
content_type = ContentType.objects.get_for_model(<model>)
return qs.filter(pk__in=Favourite.objects
.filter(owner_id=user)
.filter(content_type_id=content_type)
.values_list('object_id', flat=True)
)
else:
return qs
在此示例中,缺少 <model>-属性。如何将 Project 中的这些信息传递给过滤器?
【问题讨论】:
标签: python django django-filter drf-queryset