Ale*_*Grs 9 django django-rest-framework
我有一个带有DateTimeField的模型:
class MyShell(models):
created = models.DateTimeField(auto_now=true)
Run Code Online (Sandbox Code Playgroud)
我使用Django Rest Framework将api链接到它:
class ShellMessageFilter(django_filters.FilterSet):
created = django_filters.DateTimeFilter(name="created",lookup_type="gte")
class Meta:
model = ShellMessage
fields = ['created']
class ShellListViewSet(viewsets.ModelViewSet):
"""
List all ShellMessages
"""
serializer_class = ShellMessageSerializer
queryset = ShellMessage.objects.all()
filter_class = ShellMessageFilter
Run Code Online (Sandbox Code Playgroud)
当我使用以下URL点击我的API时,它完美地运行:
http://127.0.0.1:8000/api/shell/?created=2014-07-17
# It returns all shell with a date greater than the one provided in URL
Run Code Online (Sandbox Code Playgroud)
但是,我希望通过根据日期和时间进行过滤来做更多的事情.我尝试了以下网址但没有成功:
http://127.0.0.1:8000/api/shell/?created=2014-07-17T10:36:34.960Z
# It returns an empty array whereas there are items with a created field greater than 2014-07-17T10:36:34.960Z
Run Code Online (Sandbox Code Playgroud)
如果你们知道如何继续......我在django-filters文档中找不到任何好的信息或示例......
这可能不是您想要的,但您可以简单地从 Unix 时间进行转换。例如:
def filter_unix_dt(queryset, value):
if not value:
return queryset
try:
unix_time = int(value)
t = datetime.fromtimestamp(unix_time)
result = queryset.filter(created__gte=t)
return result
except ValueError:
return queryset
class ShellMessageFilter(django_filters.FilterSet):
created = django_filters.DateTimeFilter(action=filter_unix_dt)
class Meta:
model = ShellMessage
fields = ['created']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6097 次 |
| 最近记录: |