Django管理GUI可以过滤文本字段是否为空白?

时间:2009-02-24 01:16:08

标签: django

我有一个包含文本字段的Django模型。在管理GUI中,我希望能够仅过滤包含此字段中文本的记录。有可能吗?

类似这样的代码将过滤textfield的内容,但会显示过滤器中“All”和每个不同条目的过滤器。我想过滤'全部'或'包含某些东西'。

class MyModel(models.Model):
    # ...
    textfield = models.CharField(max_length=100)
    # ...

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('...', 'textfield', '...')
    list_filter = ('...', 'textfield', '...')

3 个答案:

答案 0 :(得分:6)

是的,但没有记录。查看django\contrib\admin\filterspecs.py以了解如何创建默认过滤器规范以及如何创建自己的过滤器规范。此功能计划用于1.1版,如果您想在最新的HEAD版本上尝试该功能,则已经有一个补丁:http://code.djangoproject.com/ticket/5833

还没有记录的是,您可以在change_list页面的URL上放置任意GET参数来过滤结果。例如/admin/app/model/?field1__lte=5&field2__gte=10遗憾的是,?field__isnull=True不起作用,但您可以轻松地尝试查看是否可以找到适合您情况的过滤器。

答案 1 :(得分:0)

是的,您可以扩展SimpleListFilter并轻松执行此操作,因为django 1.4。参见:

请参阅:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

答案 2 :(得分:-2)

没有。见http://docs.djangoproject.com/en/dev/ref/contrib/admin/#list-filter

  

设置list_filter以激活过滤器   更改列表的右侧边栏   管理员的页面。这应该是一个   字段名称列表,以及每个字段名称   指定字段应为a   BooleanField,CharField,DateField,   DateTimeField,IntegerField或   ForeignKey的。

但是...

两件事。

  1. 请务必为文本字段留空。

    类MyModel(models.Model):     #...     textfield = models.CharField(max_length = 100,blank = True)     #...

  2. 添加is_blank方法以帮助处理。它没有过滤,但它很有帮助。

    def is_blank(self):     return len(self.textfield)== 0