unc*_*lby 7 python django django-admin
所以,说我有这样的模型:
class Foo(Model):
name = CharField(max_length=200)
def latest_comment(self):
try:
object = self.comment_set.latest()
if object:
return object.when_posted.date()
except:
return ""
class Comment(Model):
when_posted = DateTimeField()
text = TextField()
Run Code Online (Sandbox Code Playgroud)
然后这是modelAdmin:
class FooAdmin(ModelAdmin):
list_display = ['name', 'latest_comment']
ordering = ['latest_comment']
admin.site.register(Foo, FooAdmin)
Run Code Online (Sandbox Code Playgroud)
当我去管理网站说在app.Foo中找不到'latest_comment'时,它会抛出一个错误.在list_display中使用它可以正常工作.所以,我的问题是:有没有办法通过模型的方法在list_display中订购模型?如果是这样,怎么样?
我还没有测试代码,但只是作为尝试通过使用注释函数覆盖 ModelAdmin 的查询集来实现此功能以对相关字段中的字段进行排序的想法:
class FooAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(FooAdmin, self).queryset(request)
return qs.distinct() \
.annotate(date_of_last_comment=Max('comment__date')) \
.order_by('-date_of_last_comment')
Run Code Online (Sandbox Code Playgroud)