正如问题所述 - 我正在尝试重命名 API 中公开的过滤器字段名称。
我有以下型号:
class Championship(Model):
...
class Group(Model):
championship = ForeignKey(Championship, ...)
class Match(Model):
group = ForeignKey(Group, ...)
我已经在 REST API 中公开了所有这些模型。我已经定义了
filter_fields
为 Match
模型: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
(...)
我也试过实现自定义
FilterSet
与 ModelChoiceFilter
和自定义查找方法: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/