我需要django admin中的组列用于给定的db表。我将采用样本表'Student',其中包含列id,first_name,last_name,address1,address2,address3。所以分组将是这样的:
ID - > ID
NAME - > first_name,last_name
ADDRESS - > address1,address2,address3
当我查看表中的数据行时,此目的是获取列集的标签。所以当我在Django的管理部分中检查为Student表获取的行时,我应该看到类似这样的内容:
--------------------------------------------------------------------------------- | ID | NAME | ADDRESS | --------------------------------------------------------------------------------- | ID | First Name | Last Name | Address 1 | Address 2 | Address 3 | --------------------------------------------------------------------------------- | 1 | Ron | DCunha | 1st Cross | Valencia | Mangalore | --------------------------------------------------------------------------------| | 2 | Akash | Attavar | Mark Street | Attavar | Mangalore | ---------------------------------------------------------------------------------
我必须能够在admins.py中实现这一点(通过编写扩展admin.ModelAdmin的类)。使用list_display元组我可以列出我想要查看的列。但我不知道如何分组列。请帮帮我...
答案 0 :(得分:1)
为此,您只需在Model或ModelAdmin上创建一个方法,返回所需的相应显示,然后在list_display
中使用该方法名称(它需要字段名称或 callables)。
class MyModelAdmin(admin.ModelAdmin):
...
list_display = ('id', 'full_name')
...
def full_name(self, obj):
return u'%s %s' % (obj.first_name, obj.last_name)
或Model
中的OR(如果显示在除管理员之外的其他方案中有用,则更好,否则使用ModelAdmin
):
class MyModel(models.Model):
...
def get_full_name(self):
return u'%s %s' % (self.first_name, self.last_name)
class MyModelAdmin(admin.ModelAdmin):
...
list_display = ('id', 'get_full_name')
如果您希望它可以订购,则需要在方法上定义admin_order_field
,但您必须选择一个字段用于订购:
def full_name(self, obj):
return u'%s %s' % (obj.first_name, obj.last_name)
full_name.admin_order_field = 'last_name'
如果您需要包含HTML,请在方法上指定allow_tags=True
:
def full_name(self, obj):
return u'%s %s' % (obj.first_name, obj.last_name)
full_name.allow_tags = True
最后,Django将从方法名称自动组成标签;在这种情况下,它最终将成为“全名”。如果您想要不同的东西,可以使用short_description
:
def full_name(self, obj):
return u'%s %s' % (obj.first_name, obj.last_name)
full_name.short_description = "User's Full Name"
答案 1 :(得分:0)
目前无法按照您在管理员列表视图中描述的方式对列进行分组。
克拉普拉特给你的答案是你获得几乎相同结果的替代方案。