Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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_Mysql_Django - Fatal编程技术网

Python Django在另一个不存在的表中按键排序

Python Django在另一个不存在的表中按键排序,python,mysql,django,Python,Mysql,Django,使用Django,我有两个模型 Model1 -> User -> ID -> Some properties Model2 -> Activeness -> UserId (Foreign Key to User) ->rating 这是一个简化的案例。 我正在尝试获取一个用户列表,该列表根据活跃度表中的用户等级进行排序。 User.objects.all() 这样行 但是,

使用Django,我有两个模型

Model1 -> User
          -> ID
          -> Some properties

Model2 -> Activeness
          -> UserId (Foreign Key to User)
          ->rating
这是一个简化的案例。 我正在尝试获取一个用户列表,该列表根据活跃度表中的用户等级进行排序。 User.objects.all()

这样行

但是,在某些情况下,还没有为新用户创建activeness对象。 这将导致这些新用户出现在获得的列表的顶部。 我希望它们出现在列表的底部

我不能使用python,因为我正在使用分页并一次检索一个页面

有谁能给我建议吗。 谢谢

你试过使用吗?也许会有帮助

使用annotate,您可以执行如下操作

User.objects.all().annotate(num_rating=Count('activeness__rating')).order_by('num_rating')
<MyUser: Bob: 3.62810036125>,
<MyUser: Tim: no rating>,
<MyUser: Jim: 2.41014167534>,
<MyUser: Rod: 1.35651839383>]

我希望它有助于

TLDR:筛选出活动性为空的用户对象,并在以后添加它们

长版本:给定一些模型,如

class MyUser(models.Model):
    activeness = models.ForeignKey('Activeness', null=True)
    name = models.CharField(max_length=50)

    def __unicode__(self):
        return "{}: {}".format(self.name, self.activeness.rating if self.activeness else "no rating")

class Activeness(models.Model):
    rating = models.FloatField()
还有一些像这样的样本数据

User.objects.all().annotate(num_rating=Count('activeness__rating')).order_by('num_rating')
<MyUser: Bob: 3.62810036125>,
<MyUser: Tim: no rating>,
<MyUser: Jim: 2.41014167534>,
<MyUser: Rod: 1.35651839383>]
例如,如果我们启用了debug,我们可以看到这可以防止对查询集进行无意义的计算

>>> from django.db import connection
>>> import pprint
>>> connection.queries = []
>>> for u in chain(MyUser.objects.filter(activeness__rating__isnull=False).order_by('activeness__rating').select_related('activeness'), MyUser.objects.filter(activeness__rating__isnull=True)):
>>>     print "At {u} we've done {count} SQL queries".format(u=u, count=len(connection.queries))
At Rod: 1.35651839383 we've done 1 SQL queries
At Jim: 2.41014167534 we've done 1 SQL queries
At Bob: 3.62810036125 we've done 1 SQL queries
At Tim: no rating we've done 2 SQL queries

当然,您还需要做更多的工作才能使其与a一起工作,但这超出了这个问题的范围。

当您可以发布真实代码时,为什么要使用伪代码?您尝试过降序吗
User.objects.all().order\u by('-actives\u rating')