【问题标题】:Customize list_filter results自定义 list_filter 结果
【发布时间】:2016-02-15 02:38:30
【问题描述】:

我想限制 django "list_filter" 在 Django admin 中显示的结果。

根据我下面的模型,我只希望它显示类类别中的类别(在过滤器中)并包含层整数“1”。

这可能吗?

class Category(models.Model):
    category_name = models.CharField(max_length=100, blank=False)
    tier = models.IntegerField(blank=false)
    def __str__(self):
        return self.category_name

class Product(models.Model):
    name = models.CharField ("Name", max_length=400)
    link = models.URLField("Link", max_length=900)
    store = models.ForeignKey(Store)
    category = models.ManyToManyField(Category, blank=True)

在管理员中,我有:

list_filter = ('category')

我认为我需要以某种方式合并它?

category=Category.objects.get(tier__iexact='1')

【问题讨论】:

标签: django django-admin


【解决方案1】:

这样的事情应该可以工作:

from django.contrib import admin
from django.utils.encoding import smart_text
from django.utils.translation import ugettext_lazy as _


class CategoryListFilter(admin.SimpleListFilter):
    title = _('Category')
    parameter_name = 'category'

    def lookups(self, request, model_admin):
        categories = Category.objects.filter(tier=1)
        for obj in categories:
            yield (str(obj.pk), smart_text(obj))

    def queryset(self, request, queryset):

        if self.value():
            return queryset.filter(category__id=self.value())


class ProductAdmin(admin.ModelAdmin):
    list_filter = (CategoryListFilter,)

文档:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

【讨论】:

  • 对不起 - 这不起作用。它显示正确的过滤条件,但在过滤时不显示正确的内容。它只从我的模型中返回一个(随机)单个对象。
  • 啊,我只需要更改查询集。 return queryset.filter(category__id=self.value()) 。瞧——它奏效了。我更新了你的答案。
  • 是的。完全错过了。谢谢!
猜你喜欢
  • 2019-07-11
  • 2011-10-08
  • 2018-06-25
  • 2016-07-08
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多