gpt4 book ai didi

python - 如何使用 django-filters 重命名(在 API 中公开)过滤器字段名称?

转载 作者:行者123 更新时间:2023-12-04 13:37:15 27 4
gpt4 key购买 nike

正如问题所述 - 我正在尝试重命名 API 中公开的过滤器字段名称。

我有以下型号:

class Championship(Model):
...

class Group(Model):
championship = ForeignKey(Championship, ...)

class Match(Model):
group = ForeignKey(Group, ...)

我已经在 REST API 中公开了所有这些模型。我已经定义了 filter_fieldsMatch模型:
class MatchViewSet(ModelViewSet):
filter_fields = ['group__championship']
...

这样,我可以过滤特定冠军的比赛(经过测试和工作):

curl /api/matches/?group__championship=1



是否可以为公开的过滤器使用某种别名,以便我可以使用以下内容:

curl /api/matches/?championship=1



哪里 championship在这种情况下将是 group__championship 的别名?
pip freeze返回:
django-filter==0.15.2
(...)

我也试过实现自定义 FilterSetModelChoiceFilter和自定义查找方法:
class MatchFilterSet(FilterSet):
championship = ModelChoiceFilter(method='filter_championship')

def filter_championship(self, queryset, name, value):
return queryset.filter(group__championship=value)

class Meta:
model = Match
fields = ['championship']

有观点:
class MatchViewSet(ModelViewSet):
filter = MatchFilterSet
(...)

但没有运气。 filter_championship方法甚至从未被调用。

最佳答案

您需要在具有字段类型的 django_filters 中提供模型字段作为名称。我正在考虑您正在尝试按冠军 ID 进行过滤。

class MatchFilterSet(FilterSet):
championship = django_filters.NumberFilter(field_name='group__championship_id')

class Meta:
model = Match
fields = ['championship']

关于python - 如何使用 django-filters 重命名(在 API 中公开)过滤器字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992515/

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