Форум сайта python.su
0
Здравствуйте.
Возникла проблема с написанием своего фильтра для вычисляемого поля:
есть модель ShedulePeriod в которой есть поле:
@property
def expired(self):
"""Истек или нет период действия"""
#return self.end_period < datetime.date.today()
if self.end_period < datetime.date.today():
return "Истек"
else:
return "Действует"
from django.contrib.admin.filterspecs import BooleanFieldFilterSpec, FilterSpec
from datetime import datetime
class ExpiredFilterSpec(BooleanFieldFilterSpec):
def title(self):
return "Актуальность"
def choices(self, cl):
choices = super(ExpiredFilterSpec, self).choices(cl)
yield choices.next() # специальное значение "Все" оставляем без изменений
while True:
choice = choices.next()
choice['display'] = self.end_period < datetime.date.today()
yield choice
FilterSpec.filter_specs.insert(0, (lambda f: f.name == 'expired', ExpiredFilterSpec))
class ShedulePeriodAdmin(admin.ModelAdmin):
...
list_display = ('office', 'begin_period', 'end_period', 'expired' )
...
admin.site.register(ShedulePeriod, ShedulePeriodAdmin)
Офлайн
0
Можно код модели, ошибка явно указывает на то, что поля ‘expired’ нет в модели…
Офлайн
0
freemon
Можно код модели, ошибка явно указывает на то, что поля ‘expired’ нет в модели…
class ShedulePeriod(models.Model):
"""Период для расписания"""
office = models.ForeignKey(Office, verbose_name = "офис", db_index = True)
begin_period = models.DateField("начало периода", db_index = True)
end_period = models.DateField("конец периода", db_index = True)
@property
def expired(self):
"""Истек или нет период действия"""
#return self.end_period < datetime.date.today()
if self.end_period < datetime.date.today():
return "Истек"
else:
return "Действует"
def __unicode__(self):
return ''.join([ unicode(self.office), ', ', unicode(self.begin_period), ' - ', unicode(self.end_period), ])
class Meta:
ordering = ['begin_period', 'end_period']
verbose_name = "период расписаний работы"
verbose_name_plural = "периоды расписаний работы"
Отредактировано (Март 29, 2011 14:15:10)
Офлайн
0
По-пробуй так:
FilterSpec.register(lambda f: (hasattr(f, 'expired') and bool(f.expired) or isinstance(f, models.related.ShedulePeriod)), ExpiredFilterSpec)
Отредактировано (Март 29, 2011 14:49:23)
Офлайн
0
Подсмотрел здесь ->
Офлайн