3
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'

4

3 回答 3

0

看起来您使用的代码几乎完全来自Django ticket,它在评论中有一个解决方法来设置默认过滤器值。目前还没有一种特别优雅的方式来做到这一点。

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

于 2009-05-13T09:02:59.277 回答
0

我通过在将请求对象中的 GET 数据传递给changelist_view(). 不优雅,但它有效。

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)

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

于 2009-05-13T14:21:34.357 回答
0

if ('HTTP_REFERER' in request.META) and (request.META['HTTP_REFERER'].find('?') == -1) and (not request.GET.has_key('status__exact')):

使用此保存条件而不是 'gerdemb' 给出的上述解决方案中给出的条件,以便也可以选择所有

于 2009-05-15T05:45:52.290 回答