对于Django Admin,为什么@property
定义在list_display
中可见,但在field_sets
或list_filter
中看不到?
例如。在下面的示例中,my_prop
在管理员中完美地显示为list_display
字段,而不是field_set
models.py
:
class MyModel (models.Model):
// code
@property my_prop(self):
// code
admin.py
:
@admin.register(MyModel):
class MyModelAdmin(AdminModel):
list_display=('my_prop',)
fieldsets = ( ('Summary',{ 'fields':('myprop',) }))
修改
感谢Iain Shelvington解释说,@property
在Django Admin中显示为readonly_field
的要求。
在我的示例中以真实的示例为例进一步更新了@property
的构造方式。欢迎就如何在Django Admin中过滤相当于list_filter
字段的想法提出建议!
closure_datetime = models.DateTimeField()
@property
def my_prop(self):
if self.closure_datetime :
return True
else:
return False
答案 0 :(得分:1)
如果要将非字段(例如属性)显示在管理编辑页面上,则必须将其添加到readonly_fields
。
要添加一个基于closure_datetime
为空的过滤器,您可以定义这样的过滤器
class MyPropListFilter(admin.SimpleListFilter):
title = 'My Prop'
parameter_name = 'my_prop'
def lookups(self, request, model_admin):
return (
('true', 'True'),
('false', 'False'),
)
def queryset(self, request, queryset):
if self.value() == 'true':
return queryset.filter(closure_datetime__isnull=False)
if self.value() == 'false':
return queryset.filter(closure_datetime__isnull=True)
像这样将其添加到您的管理员中
class MyModelAdmin(AdminModel):
list_filter = [
MyPropListFilter
]