Ism*_*ma9 4 python django filtering filter django-rest-framework
我正在尝试在 django restFramework 中按日期时间过滤。好像不行,因为不过滤,总是带来同样的结果。
模型.py
#Modelo Fechas que formara parte del modelo horario
class Fecha(models.Model):
fecha_inicio = models.DateTimeField(blank=True, default='')
fecha_fin = models.DateTimeField(blank=True, default='')
def __str__(self):
return self.fecha_inicio, self.fecha_fin
#Modelo Horario
class Horario(models.Model):
profesional = models.ForeignKey(Profesional, unique=True)
fechas = models.ManyToManyField(Fecha)
def __str__(self):
return self.profesional.user.username
Run Code Online (Sandbox Code Playgroud)
查看.py
class FechaList(generics.ListAPIView):
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
serializer_class = FechaSerializer
queryset = Fecha.objects.all()
filter_class = HorarioFilter
Run Code Online (Sandbox Code Playgroud)
网址.py
url(r'^horario/$', views.FechaList.as_view())
Run Code Online (Sandbox Code Playgroud)
过滤器.py
class HorarioFilter(django_filters.FilterSet):
date_start = django_filters.DateTimeFilter(name="fecha_inicio")
class Meta:
model = Fecha
fields = {
'date_start': ['lte', 'gte', 'lt', 'gt'],
}
Run Code Online (Sandbox Code Playgroud)
序列化器.py
class FechaSerializer(serializers.ModelSerializer):
class Meta:
model = Fecha
fields = ('fecha_inicio','fecha_fin')
Run Code Online (Sandbox Code Playgroud)
请求:http : //127.0.0.1 : 8000/horario/?date_start__gte=2015-6-28+00 : 00。不要做任何事情,不要过滤,但响应是“horario”对象的列表并给出 200 代码。
谢谢!!!!:)
您可以简单地将lt, lte, gt,gte用于要过滤的字段,如下所示: class HorarioFilter(django_filters.FilterSet):
class Meta:
model = Horario
fields = {
'fecha__inicio': ['lte', 'gte', 'lt', 'gt'],
}
Run Code Online (Sandbox Code Playgroud)
您的 API 请求将是: GET {{DOMAIN}}/{{RESOURCES}}/?fecha__inicio__gte=2017-6-28+00:00&fecha__inicio__lt=2017-6-29+00:00:00
如果你想有一个清洁剂或用于查询参数的自定义查找EXPR,您可以使用创建这样一个别名这样:
class HorarioFilter(django_filters.FilterSet):
class Meta:
model = Horario
fields = {
'started__lte': ['fecha__inicio__lte'],
'started__gte': ['fecha__inicio__gte'],
}
Run Code Online (Sandbox Code Playgroud)
那么您的 API 请求将类似于: GET {{DOMAIN}}/{{RESOURCES}}/?started__gte=2017-6-28+00:00&started__lte=2017-6-29+00:00:00
最重要的是,假设您使用推荐的django-filter,并且您使用的是 1.x. 如果您没有在 DRF 设置中指定全局过滤器后端,请尝试将其添加到您的视图中
filter_backends = (django_filters.rest_framework.DjangoFilterBackend, )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6940 次 |
| 最近记录: |