Django订单查询按OnetoOneField设置
我有两个模型UserProfile和User。UserProfile模型有一个与用户一起存档的onetoone。我知道了如何通过UserProfile包含的变量对其进行排序。但是,我不知道如何按照相关的用户模型对UserProfile中的项目进行排序Django订单查询按OnetoOneField设置,django,django-queryset,Django,Django Queryset,我有两个模型UserProfile和User。UserProfile模型有一个与用户一起存档的onetoone。我知道了如何通过UserProfile包含的变量对其进行排序。但是,我不知道如何按照相关的用户模型对UserProfile中的项目进行排序 class User(AbstractBaseUser): full_name = models.CharField(max_length=255, blank=True, null=True) class UserProfile(m
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')
如何跳转到用户模型?您可以使用双下划线(
\uuu
)跟踪OneToOneField
s和其他外键关系。:
UserProfile.objects.all().order_by('user__full_name')
UserProfile.objects.all().order\u by('user\u full\u name')
这与Python中通常获取(一连串)属性的方式有点类似。例如,如果用户
有一个OneToOneField
到(例如)一个办公室
模型,那么我们可以使用User\uu Office\uu loor
进行查询,按照用户办公室所在的楼层对用户进行排序
请注意,这只适用于处理字段的情况。因此,如果您有一个用户
类,该类有名字
和姓氏
,并且对全名
使用@属性
(换句话说,全名
是在需要时确定的),那么这将不起作用,您必须在Python级别进行排序。这是合乎逻辑的,因为数据库当然不知道关于Django ORM层的任何信息,因此它无法解释这个属性在做什么