class User(AbstractBaseUser,PermissionsMixin): email = models.EmailFIEld(unique=True,max_length=255) mobile = PhoneNumberFIEld(null=True) username = models.CharFIEld(null=False,unique=True,max_length=255) is_online = models.BooleanFIEld(default=False)class UserProfile(models.Model): user = models.OnetoOneFIEld(User,related_name='profile',on_delete=models.CASCADE,) badge = models.ImageFIEld(upload_to='media/badges/',null=True) reputation = models.IntegerFIEld(default=0) status = models.CharFIEld(max_length=255,null=True,blank=True)@H_403_12@现在,我正在尝试获取所有在线用户并通过信誉(在配置文件对象中)对其进行排序,并排除名誉小于200的用户.
这是我的查询不起作用,
User.objects.filter(is_online=True).order_by('reputation').exclude('reputation' < 200)@H_403_12@有人可以帮助这个查询的正确格式吗?
解决方法 好吧,如果你写.exclude(‘reputation’< 200),那么Python将首先评估'声誉'< 200 - 将在Python 3.x中 - 无法比较,并且在Python-2.x中返回False,然后将该布尔值传递给排除. 但请注意,您根本不会过滤声誉.它只是一个布尔值(在最好的情况下),你传递给过滤器. 您可以使用参数名称在Django中执行比较:使用__lt后缀表示“小于”. 另一件事是您在用户上查询,但信誉存储在UserProfile中,因此您需要遵循反向外键(这种反向关系用于过滤器配置文件,您可以通过使用两个连续的下划线再次访问它). 所以我们可以用以下方法解决排除部分:(User.objects.filter(is_online=True) .order_by('profile__reputation') .exclude(profile__reputation__lt=200))@H_403_12@请注意,如果排除低于200的值,这与过滤等于和大于200的值基本相同,因此我们可以将其移至过滤器部分:
(User.objects.filter(is_online=True,profile__reputation__gte=200) .order_by('profile__reputation'))@H_403_12@ 总结以上是内存溢出为你收集整理的python – 复杂的django查询,包括一对一模型全部内容,希望文章能够帮你解决python – 复杂的django查询,包括一对一模型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述我有一个用户对象,它与一个配置文件对象有一对一的关系. class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True, max_length=255) mobile = PhoneNumberField(null=True) username = models.Ch 我有一个用户对象,它与一个配置文件对象有一对一的关系.
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
如何使用python自动创建词典?
上一篇
2022-06-03
python – 为数组中的nan和inf值创建一个掩码
下一篇
2022-06-03
评论列表(0条)