【问题标题】:Change admin field filter name django 1.7 - ModelAdmin.list_filter更改管理字段过滤器名称 django 1.7 - ModelAdmin.list_filter
【发布时间】:2016-11-18 00:14:51
【问题描述】:

基本上,我正在尝试为我的过滤器字段创建自定义名称,因为原始数据库值没有多大意义。当前值为 0,1 和 ?。我在 ModelAdmin.list_filter 部分遵循了 Django 管理指南https://docs.djangoproject.com/en/1.10/ref/contrib/admin/

下面是我的代码:

@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.

我要更改下面红框中的值:

【问题讨论】:

    标签: python django


    【解决方案1】:

    我认为你的第三行应该是这样的:

    list_filter = (PolicyComparisonFilter, )
    

    没有引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2020-09-15
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多