7

だから、私はこのようなモデルを持っているとしましょう:

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()

次に、これはmodelAdminです。

class FooAdmin(ModelAdmin):
    list_display = ['name', 'latest_comment']
    ordering = ['latest_comment']

admin.site.register(Foo, FooAdmin)

管理サイトにアクセスすると、app.Fooに「latest_comment」が見つからなかったというエラーがスローされます。list_displayに含めると正常に機能します。だから、私の質問は:モデルのメソッドによってlist_displayのモデルを並べ替える方法はありますか?もしそうなら、どのように?

4

3 に答える 3

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')
于 2012-06-11T21:12:33.820 に答える
1

順序付けはSQLレベルの機能であり、データベースはモデルのメソッドについて何も認識していません。

ただし、クエリセットをリストに変換してから、のようなものを使用することで、事後に並べ替えることができますsorted。参照:http ://wiki.python.org/moin/HowTo/Sorting/

しかし、その価値については、ソートされたリストが管理者で機能するとは思えません。私は間違っている可能性がありますが、Djangoがクエリセットを維持するためにそれを必要としていると確信しています。

于 2012-06-11T14:50:07.617 に答える
0

django docから、独自のget_orderingメソッドを定義できます。

于 2012-06-11T14:50:38.993 に答える