sách gpt4 ai đã đi

django - Django 管理中日期字段的自定义过滤器,Django 1.2

In lại 作者:行者123 更新时间:2023-12-02 12:23:32 34 4
mua khóa gpt4 Nike

这对于 Django 1.2 仍然有效吗?

Custom Filter in Django Admin on Django 1.3 or below

我已经尝试过,但管理类中的 list_filter 选项无法识别我的自定义过滤器。应该如何将自定义过滤器添加到list_filter中以使其显示?

    class MyModelAdmin(admin.ModelAdmin):
...
list_filter = ['is_expired_filter']

这里我的“is_expired_filter”是我新注册的自定义过滤器,这就是作者所说的他喜欢的:

    list_filter = ('is_live')

但是 Django 无法识别这一点,加载管理页面时出现的错误是

Exception Type: ImproperlyConfigured Exception Value: 'PositionAdmin.list_filter[2]' refers to field 'is_expired_filter' that is missing from model 'Position'

也许我的错误是,我不确定该问题的作者在实现自定义过滤器后如何使用原始代码。

原代码如下:

    def is_live(self):
if self.when_to_publish is not None:
if ( self.when_to_publish < datetime.now() ):
return """ True """
khác:
return """ False """

is_live.allow_tags = True

1 Câu trả lời

现在我已经掌握了我认为您想要的内容,我假设您有一个想要按 DateField 进行过滤的模型,例如:

class Position(models.Model):
expiration_date = models.DateField()
...

您现在应该修改为

class Position(models.Model):
expiration_date = models.DateField()
expiration_date.is_expired_filter = True
...

您想要做的是向 admin.py 添加一个新的过滤器类

from django.contrib.admin.filterspecs import FilterSpec, DateFieldFilterSpec
from django.utils.translation import ugettext as _
from datetime import datetime, date
class ExpiredFilterSpec(DateFieldFilterSpec):
"""
Adds filtering by future and previous values in the admin
filter sidebar. Set the is_expired_filter filter in the model field
attribute 'is_expired_filter'.
my_model_field.is_expired_filter = True
"""
def __init__(self, f, request, params, model, model_admin, **kwargs):
super(ExpiredFilterSpec, self).__init__(f, request, params, model,
model_admin, **kwargs)
today = date.today()
self.links = (
(_('All'), {}),
(_('Not Expired'), {'%s__lt' % self.field.name: str(today),
}),
(_('Expired'), {'%s__gte' % self.field.name: str(today),
}))
def title(self):
return "Filter By Expiration Date"
# registering the filter
FilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'is_expired_filter', False),
ExpiredFilterSpec))


class PositionAdmin(admin.ModelAdmin):
list_filter = ['expiration_date']

关于django - Django 管理中日期字段的自定义过滤器,Django 1.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155264/

34 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com