14 HAZİRAN 2009, Pazar
Django Django 1.3 içinde Admin veya aşağıda özel Filtre
Nasıl admin (model konsolun sağ tarafında görünen filtreler) django için özel bir filtre ekleyebilir miyim? Kolay bir filtre bu modeli temel alan vardır, ama bir "," bu alan: . hesaplanan hakkında ne biliyorum
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
< / ^ hr .
class NewsItemAdmin(admin.ModelAdmin):
form = NewsItemAdminForm
list_display = ('headline', 'id', 'is_live')
list_filter = ('is_live') # how can i make this work??
CEVAP
18 AĞUSTOS 2009, Salı
Bana bu uygulama için doğru yönde bir itme vermek için gpilotino için teşekkürler.
Soru bu kodu bir datetime onun canlı olduğunu anlamaya kullandığını fark ettim . Bu DateFieldFilterSpec kullandım ve alt.
from django.db import models
from django.contrib.admin.filterspecs import FilterSpec, ChoicesFilterSpec,DateFieldFilterSpec
from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext as _
from datetime import datetime
class IsLiveFilterSpec(DateFieldFilterSpec):
"""
Adds filtering by future and previous values in the admin
filter sidebar. Set the is_live_filter filter in the model field attribute
'is_live_filter'. my_model_field.is_live_filter = True
"""
def __init__(self, f, request, params, model, model_admin):
super(IsLiveFilterSpec, self).__init__(f, request, params, model,
model_admin)
today = datetime.now()
self.links = (
(_('Any'), {}),
(_('Yes'), {'%s__lte' % self.field.name: str(today),
}),
(_('No'), {'%s__gte' % self.field.name: str(today),
}),
)
def title(self):
return "Is Live"
# registering the filter
FilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'is_live_filter', False),
IsLiveFilterSpec))
Kullanmak için filters.py ve alma içine yukarıdaki kodu koymak için filtre eklemek istediğiniz modeli
Bunu Paylaş:
Nasıl bir Django queryset filtre içind...
Hiçbir veritabanı alanına özel list_di...
Django admin - içi inlines (veya üç mo...
Nasıl django şablon özel şablon benim ...
Django nasıl bir görünüm içinde 2 ya d...