为什么 @属性 模型定义在 list_display 中可见,但在 Django Admin 中不可见 field_sets?
Why are @property model definitions visible in list_display but not field_sets for Django Admin?
为什么 @property
定义在 list_display
中可见,但在 Django Admin 中不可见 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
如果您希望它们显示在管理编辑页面上,您必须将非字段(如属性)添加到 readonly_fields
。
要添加一个基于 closure_datetime
是否为 null 的过滤器,您可以像这样定义一个过滤器
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
]
为什么 @property
定义在 list_display
中可见,但在 Django Admin 中不可见 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
如果您希望它们显示在管理编辑页面上,您必须将非字段(如属性)添加到 readonly_fields
。
要添加一个基于 closure_datetime
是否为 null 的过滤器,您可以像这样定义一个过滤器
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
]