gpt4 book ai didi

python - 在 Django 中,跨表时如何 order_by() ?

转载 作者:行者123 更新时间:2023-12-01 03:39:35 24 4
gpt4 key购买 nike

我正在尝试过滤我的 Friendships 对象,然后按 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'

我的查询如下,它返回我需要的友谊,但顺序不正确。我尝试了许多不同的组合和示例,但不确定我没有正确理解什么:

我在 Controller 中的查询:

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,我知道这就是我失败的地方。

最佳答案

错误的不是你的顺序,而是你对结果的处理方式。让我们消化以下内容,特别是第 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

或者您一开始就打算按 friend 排序吗?

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

关于python - 在 Django 中,跨表时如何 order_by() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com