如何向django admin(显示在模型仪表板右侧的过滤器)添加自定义过滤器?我知道很容易包含一个基于该模型字段的过滤器,但是这样的"计算"字段呢:
class NewsItem(models.Model):
headline = models.CharField(max_length=4096, blank=False)
byline_1 = models.CharField(max_length=4096, blank=True)
dateline = models.DateTimeField(help_text=_("date/time that appears on article"))
body_copy = models.TextField(blank=False)
when_to_publish = models.DateTimeField(verbose_name="When to publish", blank=True, null=True)
# HOW CAN I HAVE "is_live" as part of the admin filter? It's a calculated state!!
def is_live(self):
if self.when_to_publish is not None:
if ( self.when_to_publish < datetime.now() ):
return """ <img alt="True" src="/media/img/admin/icon-yes.gif"/> """
else:
return """ <img alt="False" src="/media/img/admin/icon-no.gif"/> """
is_live.allow_tags = True
Run Code Online (Sandbox Code Playgroud)
class NewsItemAdmin(admin.ModelAdmin):
form = NewsItemAdminForm
list_display …Run Code Online (Sandbox Code Playgroud) 我想为django admin而不是普通的'is_staff'和'is_superuser'制作自定义过滤器.我在Django docs中读过这个list_filter.自定义过滤器以这种方式工作:
from datetime import date
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter
class DecadeBornListFilter(SimpleListFilter):
# Human-readable title which will be displayed in the
# right admin sidebar just above the filter options.
title = _('decade born')
# Parameter for the filter that will be used in the URL query.
parameter_name = 'decade'
def lookups(self, request, model_admin):
"""
Returns a list of tuples. The first element in each
tuple is the coded value for …Run Code Online (Sandbox Code Playgroud) 鉴于以下型号
class AnotherModel(models.Model):
n = models.IntegerField()
class MyModel(models.Model):
somefield = models.ForeignKey(AnotherModel)
Run Code Online (Sandbox Code Playgroud)
和管理员
class MyModelAdmin(admin.ModelAdmin):
list_filter = ('somefield',)
Run Code Online (Sandbox Code Playgroud)
如何过滤实例AnotherModel以仅n在管理过滤器中显示具有给定值的实例?
我需要这样的东西:
过滤
通过某个地方
所有
[给定n的AnotherModel实例列表]