代码之家  ›  专栏  ›  技术社区  ›  Mat

Django管理GUI能否过滤文本字段是否为空?

  •  3
  • Mat  · 技术社区  · 16 年前

    我有一个包含文本字段的django模型。在管理图形用户界面中,我希望能够仅筛选包含此字段中文本的记录。有可能吗?

    类似这样的代码将对textfield的内容进行过滤,但在“all”和过滤器中的每个不同条目上显示过滤器。我想筛选“全部”或“包含某些内容”。

    class MyModel(models.Model):
        # ...
        textfield = models.CharField(max_length=100)
        # ...
    
    class MyModelAdmin(admin.ModelAdmin):
        list_display = ('...', 'textfield', '...')
        list_filter = ('...', 'textfield', '...')
    
    3 回复  |  直到 12 年前
        1
  •  6
  •   gerdemb    16 年前

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

    同样没有记录的是,你可以在你的更改列表页面的URL上放置任意的get参数来过滤结果。例如 /admin/app/model/?field1__lte=5&field2__gte=10 不幸地 ?field__isnull=True 不起作用,但您可以很容易地进行实验,看看是否可以找到一个在您的案例中起作用的过滤器。

        2
  •  0
  •   fastmultiplication    12 年前

    是的,您可以扩展simpleListFilter,并且可以很容易地从django 1.4开始执行此操作。见:

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

        3
  •  -2
  •   S.Lott    16 年前

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

    设置列表过滤器以激活过滤器 更改列表的右侧边栏 管理员页面。这应该是一个 字段名列表,以及每个字段名 指定的字段应为 布尔字段、charfield、datefield, 日期时间字段、整数字段或 外键。

    但是…

    两件事。

    1. 请确保允许文本字段为空。

      MyModel类(models.model): …… textfield=models.charfield(max_length=100,blank=true) ……

    2. 添加一个is_blank方法以帮助处理。它不过滤,但有帮助。

      def为空(self): 返回len(self.textfield)==0