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

问题描述 投票:1回答:1

我在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对象)?
python django django-admin
1个回答
1
投票

如果你想在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。

快乐的黑客!

© www.soinside.com 2019 - 2024. All rights reserved.