2016-11-18 120 views
0

基本上,我試圖爲我的過濾器字段創建自定義名稱,因爲原始數據庫值沒有太多含義。當前值是0,1和?我遵循Django管理員指南https://docs.djangoproject.com/en/1.10/ref/contrib/admin/的ModelAdmin.list_filter部分。更改管理員字段過濾器名稱django 1.7 - ModelAdmin.list_filter

下面是我的代碼:

@admin.register(AuditPolicies) 
class AuditPoliciesAdmin(admin.ModelAdmin): 
    list_filter = ('PolicyComparisonFilter',) 


class PolicyComparisonFilter(admin.SimpleListFilter): 
    title = _('Policy Comparison') 
    parameter_name = 'SourceState' 

    def lookups(self, request, model_admin): 
     """ 
     Returns a list of tuples. The first element in each 
     tuple is the coded value for the option that will 
     appear in the URL query. The second element is the 
     human-readable name for the option that will appear 
     in the right sidebar. 
     """ 
     return (
      ('0', _('No Match')), 
      ('1', _('Match')), 
      ('?', _('Missing')), 
     ) 

    def queryset(self, request, queryset): 
     """ 
     Returns the filtered queryset based on the value 
     provided in the query string and retrievable via 
     `self.value()`. 
     """ 
     # Compare the requested value (either '80s' or '90s') 
     # to decide how to filter the queryset. 
     if self.value() == '0': 
      return queryset.filter(SourceState__gte = '0') 
     if self.value() == '1': 
      return queryset.filter(SourceState__gte = '1') 
     if self.value() == '?': 
      return queryset.filter(SourceState__gte = '?') 

而且從我的模型幾行(數據庫):

364 STASH master-bi-prod-s3-ilayer-sen-group-user /master-bi-prod-s3-ilayer-sen-group-user.json 1 MASTER master-bi-prod-s3-ilayer-sen-group-user arn:aws:iam::588738232867:policy/master-bi-prod-s3-ilayer-sen-group-user 1 2016-11-17 04:04:16.117000 
365 STASH master-bi-prod-s3-pop-admin /master-bi-prod-s3-pop-admin.json 0 MASTER master-bi-prod-s3-pop-admin arn:aws:iam::588738232867:policy/master-bi-prod-s3-pop-admin 0 2016-11-17 04:04:16.117000 

我的數據庫模型:

class AuditPolicies(models.Model): 
    ComparisonDate = models.DateTimeField(default=datetime.now(), blank=True) 
    Source = models.CharField(max_length=32, blank=True, null=True) 
    SourcePolicyName = models.CharField(max_length=64, blank=True, null=True) 
    SourcePolicyPath = models.CharField(max_length=128, blank=True, null=True) # todo: check if this should be using models.SlugField() 
    SourceState = models.CharField(max_length=2, blank=True, null=True) 

    Target = models.CharField(max_length=32, blank=True, null=True) 
    TargetPolicyName = models.CharField(max_length=64, blank=True, null=True) 
    TargetPolicyPath = models.CharField(max_length=128, blank=True, null=True) 
    TargetState = models.CharField(max_length=2, blank=True, null=True) 

    class Meta(object): 
     verbose_name_plural = "Audit Policies" 

我得到的錯誤當我嘗試運行Django時:

ERRORS: 
<class 'policy_manager.apps.policy.admin.AuditPoliciesAdmin'>: (admin.E116) The value of 'list_filter[0]' refers to 'PolicyComparisonFilter', which does not refer to a Field. 

我後在下面的紅色框更改值:

enter image description here

回答

2

我覺得你的第三個行應該是這樣的:

list_filter = (PolicyComparisonFilter,) 

不帶引號。

+0

哇我的金髮時刻,謝謝你的幫助:) –