我正在尝试过滤我的Friendships对象然后order_by user.first_name,但它无法正常工作。谁能告诉我我做错了什么?
这是我的模特:
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
,我知道这就是我失败的地方。
答案 0 :(得分:2)
这不是你的命令错误,而是你对结果做了什么。让我们消化以下内容,特别是第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
中,您有一个FriendShip
个实例,每个ordered_friend都会以ordered_friend
的用户名返回给您。但是,在获得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')