我有一个包含文本字段的Django模型。在管理GUI中,我希望能够仅过滤包含此字段中文本的记录。有可能吗?
类似这样的代码将过滤textfield的内容,但会显示过滤器中“All”和每个不同条目的过滤器。我想过滤'全部'或'包含某些东西'。
class MyModel(models.Model):
# ...
textfield = models.CharField(max_length=100)
# ...
class MyModelAdmin(admin.ModelAdmin):
list_display = ('...', 'textfield', '...')
list_filter = ('...', 'textfield', '...')
答案 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的。
但是...
两件事。
请务必为文本字段留空。
类MyModel(models.Model): #... textfield = models.CharField(max_length = 100,blank = True) #...
添加is_blank方法以帮助处理。它没有过滤,但它很有帮助。
def is_blank(self): return len(self.textfield)== 0