2016-10-04 4 views
1

Friendshipsオブジェクトをフィルタリングしてからorder_by user.first_nameをフィルタリングしようとしていますが、機能しません。誰かが私が間違っていることを教えてもらえますか?Djangoでは、テーブルにまたがるときにorder_by()をどうやって使うのですか?

は、ここに私のモデルです:

class Friendships(models.Model): 
    user = models.ForeignKey('Users', models.DO_NOTHING, related_name="usersfriend") 
    friend = models.ForeignKey('Users', models.DO_NOTHING, related_name ="friendsfriend") 
    created_at = models.DateTimeField(blank=True, null=True) 
    updated_at = models.DateTimeField(blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'friendships' 

class Users(models.Model): 
    first_name = models.CharField(max_length=45, blank=True, null=True) 
    last_name = models.CharField(max_length=45, blank=True, null=True) 
    created_at = models.DateTimeField(blank=True, null=True) 
    updated_at = models.DateTimeField(blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'users' 

私のクエリは私に必要な友情を返しますが、順序が正しくないとされ、次のようです。私は、異なる組み合わせと例の数を試みたが、ちょうど私が正しく理解していないよ何かわからないしました:

私のコントローラで私のクエリ:私は数を試した

ordered_friends = Friendships.objects.filter(user__id=1).order_by('user__first_name') 
for ordered_friend in ordered_friends: 
    print ordered_friend.friend.first_name, ordered_friend.friend.last_name 

注意を、 user__first_nameの代わりの組み合わせと私はこれが私が失敗していることを知っています。

答えて

2

あなたの注文は間違っていますが、結果をどうするかはわかりません。あなたは、各ordered_friendがそのordered_friendのユーザー名であなたに返されるFriendShipのインスタンスを持っているordered_friendで3

ordered_friends = Friendships.objects.filter(user__id=1).order_by('user__first_name') 
for ordered_friend in ordered_friends: 
    print ordered_friend.friend.first_name, ordered_friend.friend.last_name 

特にライン、私たちは次のことをダイジェストしてみましょう。しかし、ordered_friendを入手した場合は、ordered_friend.friendを実行しますが、これは注文した列ではないので、項目がアルファベット順に印刷されないことは驚くことではありません。あなたはたぶんやることを意味する

print ordered_friend.user.first_name, ordered_friend.user.last_name 

あなたはおそらく最初に友人に並べ替えるつもりでしたか?

Friendships.objects.filter(user__id=1).order_by('friend__first_name') 
+0

+ e4c5 - 私のORD文で...私は '.order_by(「FRIEND_FIRST_NAME」)を意味し、'私ができるように*あなたは、私が*間違った列の値によって順序付けられmistakinglyことを完全に正しいです、ありがとう友人による並べ替え。あなたはこれがどんなに大きな助けになったのか分かりません。最後にあなたの想いを含めて、あなたの完全な反応にとても感謝しています(あなたはそれを見つけてください)! // edit:私は二重のアンダースコア '.order_by( ' __ ')'が取っていたことを確認するのに苦労しましたが、間違った列を探しているのを見逃しました:) – natureminded

+0

ヘルプ – e4c5

関連する問題