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'
?
答案 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'给出的上述说明中的给定条件,以便也可以选择所有条件