Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中,在跨表访问时,如何按()排序?_Python_Django_Orm - Fatal编程技术网

Python 在Django中,在跨表访问时,如何按()排序?

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,

我正在尝试筛选我的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, 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”)
被接受,但我没有看到我查看的列是错误的:)很高兴能提供帮助