django - django 过滤器视图中 IntegerRangeField 的 Meta.filter_overrides
问题描述
使用 Django 文档中的示例,使用带有 Postgres 后端的 IntergerRangeField 创建具有以下模型的“年龄”范围:
from django.contrib.postgres.fields import IntegerRangeField
from psycopg2.extras import NumericRange
from django.db import models
class Event(models.Model):
name = models.CharField(max_length=200)
ages = IntegerRangeField()
def __str__(self):
return self.name
但是,当使用 Django Rest Frameworks 并使用带有以下过滤器的过滤器视图时,这非常有效:
import django_filters
from django_filters import rest_framework as filters
from app import Event
class EventFilter(django_filters.FilterSet):
ages = django_filters.NumericRangeFilter(queryset=Event.objects.all())
class Meta:
model = Event
fields = ['name','ages']
该视图在 /api/event_filter/ 处生成一个 AssertionError,并建议向 Meta.filters_override 添加一个覆盖。我真正欣赏的是基于此覆盖示例模型的示例,django-filters 文档http://django-filter.readthedocs.io/en/latest/ref/filterset.html#filter-overrides中的示例,并没有帮助我理解如何让它渲染。我将不胜感激任何帮助,因此我可以通过这个示例理解以在将来使用它。
解决方案
根据文档,覆盖自定义选项似乎是在Meta
类内部完成的,而不是您完成的方式。
ages = django_filters.NumericRangeFilter(queryset=Event.objects.all())
这里有几个潜在的问题:
- 声明本身似乎不受支持
- Meta 类中似乎支持覆盖
queryset
不是NumericRangeFilter
AFAIk的有效选项
您可以尝试以下方法:
from django.contrib.postgres.fields import IntegerRangeField
class EventFilter(django_filters.FilterSet):
class Meta:
model = Event
fields = ['name','ages']
filter_overrides = {
IntegerRangeField: {
'filter_class': django_filters.NumericRangeFilter,
}
}
推荐阅读
- c++ - Write a function to display the largest of three numbers. Anyone know where is wrong with my program?
- tree - Prolog Printing a Tree
- python - Python run thread of class method one by one
- amazon-web-services - 在 AWS EC2 上运行 docker 映像时出现分段错误
- django - Django - 如果单个应用程序中有超过 100 个模型怎么办
- azure - Azure 逻辑应用中服务总线连接器的消息处理策略
- mongodb - Mongodb:连接被拒绝
- ios - 适用于所有 iPhone 设备的图像调整器
- javascript - JavaScript为数组中不存在的键添加零
- python - 我在使用 Telepot 运行 Telegram Bot 时遇到问题