django SimpleListFilter

时间:2016-04-10 09:16:28

标签: python django

假设我有一个这样的模型:

# models.py

class Customer(models.Model):
    customer_name=models.CharField(max_length=50)
    licence_key=models.CharField(max_length=100)
    exp_date=models.DateTimeField(blank=True, null=True)

    def __unicode__(self):
        return self.customer_name

我希望在管理网站中有一个自定义列表过滤器,向客户显示他们的exp_date已通过。它应该有两个参数validinvalid,并将exp_date与今天的日期进行比较并显示结果。我读过它可以通过simplelistfilter来完成,但我无法弄清楚如何。

谢谢你,对不起我的英文

1 个答案:

答案 0 :(得分:2)

尝试以下代码。它将为您提供过滤有效/无效客户列表。

class ExpiryDateFilter(admin.SimpleListFilter):

    title = _('Title name')

    parameter_name = 'exp_date'

   def lookups(self, request, model_admin):
       """
           List of values to allow admin to select
       """
       return (
          ('valid', _('All Valid')),
          ('invalid', _('All Invalid')),
       )

  def queryset(self, request, queryset):
     """
         Return the filtered queryset
     """

    if self.value() == 'valid':
        return queryset.filter(exp_date__gt=datatime.datatime.now())
    elif self.value() == 'invalid':
        return queryset.filter(exp_date__lt=datatime.datatime.now())
    else:
        return queryset

在admin类中添加如下所示的列表过滤器。

class youModelAdminClass(admin.ModelAdmin):

     list_filter = [ExpiryDateFilter]
     list_display = ['CustomerValidity']

然后使用Django模型注册模型管理员。

admin.site.register(ModelClassName, youModelAdminClass)

希望这会有所帮助。