Python 在Django中,在跨表访问时,如何按()排序?
我正在尝试筛选我的Friendships对象,然后按user.first\u name排序,但它不起作用。谁能告诉我我做错了什么 以下是我的模型:Python 在Django中,在跨表访问时,如何按()排序?,python,django,orm,Python,Django,Orm,我正在尝试筛选我的Friendships对象,然后按user.first\u name排序,但它不起作用。谁能告诉我我做错了什么 以下是我的模型: class Friendships(models.Model): user = models.ForeignKey('Users', models.DO_NOTHING, related_name="usersfriend") friend = models.ForeignKey('Users', models.DO_NOTHING,
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\u first\u name
,我知道这是我失败的地方。错误的不是你的顺序,而是你对结果做了什么。让我们了解一下以下内容,特别是第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\u-friend
中,您有一个friends
的实例,每个ordered\u-friend都会在ordered\u-friend
的用户名中返回给您。但是在获得了一个ordered\u-friend
之后,您就可以执行ordered\u-friend.friend
,但这不是您订购的列,因此项目不按字母顺序打印也就不足为奇了。你本打算这么做的
print ordered_friend.user.first_name, ordered_friend.user.last_name
或者你一开始是不是打算按朋友分类
Friendships.objects.filter(user__id=1).order_by('friend__first_name')
+e4c5-谢谢你,你完全正确,我在ord语句中错误地按错误的列值排序…我的意思是
.order\u by('friend\u first\u name')
,这样我就可以按friend排序了。你不知道这是多么大的帮助,非常感谢你的全面回复,包括你最后的猜测(你说得对)!//编辑:我正在努力确保我的双下划线.order\u by(“\uuu”)
被接受,但我没有看到我查看的列是错误的:)很高兴能提供帮助