gpt4 book ai didi

OnetoOneField 的 Django 订单查询集

转载 作者:行者123 更新时间:2023-12-04 19:39:54 24 4
gpt4 key购买 nike

我有两个模型 UserProfile 和 User。 UserProfile 模型与用户有一个 onetoone 文件。我想出了如何通过它包含的变量对 UserProfile 进行排序。但是,我不知道如何通过相关的用户模型对 UserProfile 中的项目进行排序

class User(AbstractBaseUser):
full_name = models.CharField(max_length=255, blank=True, null=True)

class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
lunch_price = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)

我可以很好地运行这个查询:

from myapp.models import UserProfiles
print(UserProfile.objects.all().order_by('lunch_price')

我以为我会运行这样的东西来按全名订购,但它不起作用

from myapp.models import UserProfiles
print(UserProfile.objects.all().order_by('user.full_name')

如何跳转到用户模型?

最佳答案

您可以使用 双下划线 (__) 来遵循 OneToOneField 和其他外键关系:

UserProfile.objects.all().order_by(<b>'user__full_name'</b>)

这有点类似于在 Python 中通常如何获取(链)属性。例如,如果 User 有一个 OneToOneField 到(例如)一个 Office 模型,那么我们可以例如使用 user__office__floor 按用户办公室所在的楼层对用户进行排序。

请注意,这仅在我们使用字段时才有效。因此,例如,如果您有一个 User 类,其中包含 first_namelast_name,并且您使用 @property 对于 full_name (换句话说,full_name 在需要时确定),那么这将不起作用,您将不得不在 Python 级别进行排序。这是合乎逻辑的,因为数据库当然对 Django ORM 层一无所知,因此它无法解释该属性在做什么。

关于OnetoOneField 的 Django 订单查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50318367/

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