Django Admin:使用url参数按日期搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Admin:使用url参数按日期搜索相关的知识,希望对你有一定的参考价值。

我在Django 1.11中有一个这样定义的模型:

class MyModel(Models.Model):
    ... some fields...

    created_date = models.DateTimeField() #YYYY-MM-DD h:m:s

现在我希望能够在我的模板中按日期搜索我的模型。为此,我扩展了change_list,一切都是正确的。

我的问题是:我需要做什么来检索具有特定created_at的对象?

假设您想要在2017-12-13创建的元素。如果我去shell,我通过以下方式实现:

MyModel.objects.filter(created_date__date='2017-12-13')

一切正常,我得到了我的数据。但为什么__date运算符不能在URL中工作?如果我将__date运算符放在url中,如下所示:

127.0.0.1:8000/admin/.../?created_date__date=2017-12-13

我收到一个错误:/?e = 1

所以我通过使用__lte和__gte运算符测试了另一种方法。就像之前想要在2017-12-13创建对象一样,所以我以这种方式组合了__lte和__gte运算符:

MyModel.objects.filter(created_date__gte='2017-12-13', created_date__lte='2017-12-13')

但在这种情况下,我得到一个空的查询集。也是这样:

127.0.0.1:8000/admin/.../?created_date__gte=2017-12-13&created_date__lte=2017-12-13

所以,我的问题:

  1. 为什么__lte和__gte运算符作为URL参数工作而__date no(我得/?e = 1)?我已经测试了其他日期,没有任何变化。
  2. 我怎样才能获得特定的created_at对象)?
答案

如果你想在django admin中搜索功能,你应该在你的ModelAdmin中添加search_fields

我不熟悉您的模型管理员(因为您没有上传它)。但是,如果您只将模型注册到admin,请尝试使用ModelAdmin

    from django.contrib import admin

    from Myapp.models import MyModel


    @admin.register(MyModel)
    class MyModelAdmin(admin.ModelAdmin):
        # you can set so many things in admin. please check django doc
        ...
        # be aware it should be tuple. If you have only one, please add comma 
        search_fields = ('created_at',)

然后,您可以在管理页面中查看搜索输入。如果您通过2017-12-18搜索(或者只能使用20172017-09),您可以在网址中获取搜索获取参数(例如admin/.../?q=2017-09-29

现在您可以在admin中使用该URL。

快乐的黑客!

以上是关于Django Admin:使用url参数按日期搜索的主要内容,如果未能解决你的问题,请参考以下文章

django的路由层

Django QuerySet 是不是使用二进制搜索按日期过滤?

django request 获取请求的URL

在 Django admin 中按自定义日期范围过滤

具有父 url 参数的自定义 Django 管理站点

在 Django Urls 中将 URL 作为参数传递