通过模型中的方法对Django模型进行排序

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中订购模型?如果是这样,怎么样?

Tis*_*sho 3

我还没有测试代码,但只是作为尝试通过使用注释函数覆盖 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)