按Null筛选Django Admin 不是Null

按Null筛选Django Admin 不是Null,第1张

按Null筛选Django Admin /不是Null

我最终在这里混合使用了最佳解决方案和此代码段。

但是,我不得不稍微调整一下代码片段,删除字段类型限制并添加新的field_path,该功能最近在1.3中添加。

from django.contrib.admin.filterspecs import FilterSpecfrom django.db import modelsfrom django.utils.safestring import mark_safefrom django.utils.translation import ugettext as _class NullFilterSpec(FilterSpec):    #fields = (models.CharField, models.IntegerField, models.FileField)    @classmethod    def test(cls, field):        #return field.null and isinstance(field, cls.fields) and not field._choices        return field.null and not field._choices    #test = classmethod(test)    def __init__(self, f, request, params, model, model_admin, field_path=None):        super(NullFilterSpec, self).__init__(f, request, params, model, model_admin, field_path)        self.lookup_kwarg = '%s__isnull' % f.name        self.lookup_val = request.GET.get(self.lookup_kwarg, None)    def choices(self, cl):        # bool(v) must be False for IS NOT NULL and True for IS NULL, but can only be a string        for k, v in ((_('All'), None), (_('Has value'), ''), (_('Omitted'), '1')): yield {     'selected' : self.lookup_val == v,     'query_string' : cl.get_query_string({self.lookup_kwarg : v}),     'display' : k }# Here, we insert the new FilterSpec at the first position, to be sure# it gets picked up before any otherFilterSpec.filter_specs.insert(0,    # If the field has a `profilecountry_filter` attribute set to True    # the this FilterSpec will be used    (lambda f: getattr(f, 'isnull_filter', False), NullFilterSpec))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存