admin中的list_filter

时间:2009-05-13 08:47:51

标签: django django-admin

DECOM_CHOICES = (
    ('N', 'No'),
    ('Y', 'Yes'),
)

class Host(models.Model):
    hostname = models.CharField(max_length=36, unique=True)
    decommissioned = models.CharField(max_length=1, choices=DECOM_CHOICES, default='N')
    ip_address = models.IPAddressField()
    def __unicode__(self):
        return self.hostname

class HostAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Host Info', {'fields': ['hostname','decommissioned','ip_address']}),
    list_display = ('hostname', 'ip_address', 'decommissioned')
    list_filter = ('decommissioned')

现在有什么办法让我可以将退役过滤器默认设置为'N'而不是'All'

3 个答案:

答案 0 :(得分:0)

您似乎正在使用几乎完全来自Django ticket的代码,该注释在注释中设置了默认过滤器值。目前没有一种特别优雅的方式来做到这一点。

顺便说一下 - 你是不是更好地使用布尔字段,因为你存储的是或否?

答案 1 :(得分:0)

我通过在将请求对象传递给changelist_view()之前修改请求对象中的GET数据来实现此目的。不优雅,但它有效。

class MyModelAdmin(admin.ModelAdmin):    
    def changelist_view(self, request, extra_context=None):
        if not request.GET.has_key('decommissioned__exact'):
            q = request.GET.copy()
            q['decommissioned__exact'] = 'N'
            request.GET = q
            request.META['QUERY_STRING'] = request.GET.urlencode()
        return super(MyModelAdmin,self).changelist_view(request, extra_context=extra_context)

注意:我这里没有尝试过这个确切的代码,但你应该明白这个想法。

答案 2 :(得分:0)

if(request.META中的'HTTP_REFERER')和(request.META ['HTTP_REFERER']。find('?')== -1)和(不是request.GET.has_key('status__exact')):

使用此保存条件而不是'gerdemb'给出的上述说明中的给定条件,以便也可以选择所有条件