0

初心者なので、何がどこに属しているかを理解しようとしています。ListViewシステム内のすべてのユーザーを一覧表示する必要があり、次のようなget_queryset方法が含まれています。

def get_queryset(self):
    users = []
    for user in User.objects.all(): 
        a_user = {}            
        a_user['username'] = user.username
        a_user['full_name'] = user.get_full_name()
        a_user['num_of_friends'] = len(user.friends.all())  
        a_user['phone_num'] = user.get_profile().phone_num

        a_user['has_subscription'] = bool(Subscription.objects.filter(subscriber=self.request.user))

        users.append(a_user)
    return users

したがって、ユーザーのクエリセットを返すのではなく、各ユーザーが選択したさまざまな属性からこのディクショナリを作成しています。テンプレート デザイナーが取得できるものは、必要だと思うものだけに制限されています。

代わりに、ユーザー オブジェクトをテンプレートに渡し、テンプレート ライターが必要なものを取得できるようにすることをお勧めしますか? 答えはイエスだと思います。

しかし、a_user['has_subscription']上記の行になると、答えは No になると思いますか?

4

2 に答える 2

1

あなたがやった方法はまったく問題ありません。ビュー内のテンプレートに必要な情報を明示的に提供することで、テンプレートをモデルから分離すると便利であることがわかりました。これは基本的にあなたが行ったことです。というメソッドから実際のクエリセットを返さないのは少し奇妙ですが、このget_querysetような批判に基づいて、現在 Django で実装されているクラスベースのビューは、ビュー コードを整理する独断的な方法とは対照的です。抽象化は、言うなれば Django ORM ほど単純ではありません。

もう少し洗練されたものが本当に必要な場合は、valuesメソッドを使用してクエリセットを絞り込み、サブスクリプション カウントに追加するアノテーションを使用できます。しかし、おそらくあまり意味はありません。

于 2012-12-12T21:08:52.383 に答える
0

配列「users」で何をしようとしているかによって異なります。テンプレートを編集する人は、特定の方法でのみデータのスタイルと表示を行うことができます。get_queryset 関数は、テンプレートのデータを提供できます。

于 2012-12-12T20:42:28.313 に答える