2

django ビューにクエリセットがあります。

クエリセットの最初の要素になるように、アイテムの1つの位置を変更したいと思います。

それを行う方法について何か考えはありますか?

編集:

私はクエリセットを持っています:

   qs = UserProfile.objects.filter(myfilter=whatever)

このクエリセット内に次のものがあることを知っています。

   specific_user.userprofile

私がやりたいことは、テンプレートのループでこのクエリセットを使用するため、user.userprofile をクエリセットの最初の位置に配置することです。

    {% for i in qs %}
    <div> i.name </div>

そして、リストの最初の名前が特定のユーザーの名前であることを確認したいと思います。

4

2 に答える 2

6

QuerySetDjangoのオブジェクトは、データベースクエリの結果を抽象的に表現したものです。一般的には、クエリセットの特定のオブジェクトが要求されたときに後で実行される可能性のあるSQLを表しますが、それが発生するまで、クエリは実行されません。したがって、クエリセットをリストのように考えることはできません。リストは任意に並べ替えられる可能性があります。クエリセット内のオブジェクトをそのメソッドを使用して並べ替えるように要求できるorder_byため、特定のオブジェクトを最初に配置する場合は、並べ替え可能なもののDB側に並べ替え可能な属性が必要です。これは、列またはF式を使用してその列から計算された値である可能性があります。

ただし、ニーズに応じて、ビューにクエリセットのリストを作成できるようです。

profiles = [specific_user.userprofile] + [profile for profile in UserProfile.objects.filter(myfilter=whatever).exclude(id=specific_user.userprofile.id)]

これをコンテキストに追加し、テンプレートの元のクエリセットの代わりに繰り返し処理します。

于 2012-11-20T21:46:13.930 に答える