我正在使用Django来运行一个小病人名单。在管理界面中,我有一些在admin.py文件中定义的列。
class InpatientAdmin(admin.ModelAdmin):
list_filter = ['discharged','date_of_admission']
date_hierarchy = 'date_of_admission'
list_display = ('room', '__unicode__', 'date_of_admission', 'date_of_discharge', 'discharged')
inlines = [ EncounterInline ]
unicode字段在模型中定义为
def __unicode__(self):
return '%s, %s %s' % (self.last_name, self.first_name, self.DOB)
管理界面有效。 Django程序员做的很棒。但是,当我单击unicode定义字段的标题时,它将不会排序。我可以对Room,date_of_admission和date_of_discharge进行排序,但unicode字段不会排序。我尝试在unicode def中返回self.last_name,但这也没有用。我怀疑unicode字段没有提供钩回比较例程。
我确信有一些简单的工作要做,但我不知道google用于查找解决方案的条款。帮助赞赏。
谢谢, 史蒂夫
答案 0 :(得分:2)
试图使用Peter DeGlopper的答案,但有几个问题,该片段应该放在models.py中,但模型中没有定义self
。
因此,
self.__unicode__.admin_order_field = 'last_name'
没有工作。
即使您尝试:
__unicode__.admin_order_field = 'last_name'
管理员很顽固,不想排序。因此,我找到了this solution。那就是创建一个模型方法,只返回unicode名称,然后定义排序字段。
同样,不是我的解决方案(代码来自链接),但它应该帮助其他人面临同样的问题:
<强> models.py 强>
def unicode_sort(self):
return self.__unicode__()
unicode_sort.admin_order_field = 'sort'
unicode_sort.short_description = u'name'
<强> admin.py 强>
list_display = ('unicode_sort',)
答案 1 :(得分:0)
如果您想按单个字段排序(例如last_name
),可以将其设置为admin_order_field
方法的__unicode__
。不支持通过可调用字段进行更复杂的排序。
https://docs.djangoproject.com/en/dev/ref/contrib/admin/
通常,list_display的元素不是实际的数据库字段,不能用于排序(因为Django在数据库级别进行所有排序)。
但是,如果
list_display
的元素代表某个数据库字段,您可以通过设置该项的admin_order_field
属性来指明这一事实。
所以这应该有效,只要逻辑是你想要的:
def __unicode__(self):
return '%s, %s %s' % (self.last_name, self.first_name, self.DOB)
self.__unicode__.admin_order_field = 'last_name'