相关疑难解决方法(0)

django - 将列表转换回查询集

我有一些记录,我想根据计算值排序.得到的答案在这里 ......像这样:

sorted(Profile.objects.all(), key=lambda p: p.reputation)
Run Code Online (Sandbox Code Playgroud)

在这样的Profile类上:

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,通用视图需要一个queryset对象,如果我给它一个列表就会抛出错误.

有没有办法做到这一点返回一个查询集

要么...

我可以以某种方式将列表转换为查询集吗?在django docs中找不到类似的东西.

我希望不要对数据进行非规范化,但我想我会这样做.

更新/答案:

似乎获取查询集的唯一方法是,如果您可以将所有逻辑都放入sql查询中.

如果那是不可能的,(我认为)你需要对数据进行非规范化

python sorting django list django-queryset

54
推荐指数
2
解决办法
5万
查看次数

按字段值的QuerySet

假设我有以下型号:

class Contest:
    title = models.CharField( max_length = 200 )
    description = models.TextField()

class Image:
    title = models.CharField( max_length = 200 )
    description = models.TextField()
    contest = models.ForeignKey( Contest )
    user = models.ForeignKey( User )

    def score( self ):
        return self.vote_set.all().aggregate( models.Sum( 'value' ) )[ 'value__sum' ]

class Vote:
    value = models.SmallIntegerField()
    user = models.ForeignKey( User )
    image = models.ForeignKey( Image )
Run Code Online (Sandbox Code Playgroud)

站点的用户可以将他们的图像贡献给多个竞赛.然后其他用户可以向上或向下投票.

一切正常,但现在我想显示一个页面,用户可以看到对某个比赛的所有贡献.图像应按其分数排序.因此我尝试了以下方法:

Contest.objects.get( pk = id ).image_set.order_by( 'score' )
Run Code Online (Sandbox Code Playgroud)

因为我担心它不起作用,因为'score'没有可用于查询的数据库字段.

python database django

28
推荐指数
2
解决办法
3万
查看次数

如何按django中的计算值排序

嘿我想根据django中的计算值对对象进行排序...我该怎么办?

以下是基于堆栈溢出的用户配置文件模型示例,解释了我的困境:

class Profile(models.Model):
    user = models.ForeignKey(User)

    def get_reputation():
        ... 
        return reputation
    reputation = property(get_reputation)
Run Code Online (Sandbox Code Playgroud)

所以,说我想按声誉对用户进行排序.我怎么做?我知道你不能这样做:

Profile.objects.order_by("-reputation")
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助 :)

python sorting django web-applications django-models

6
推荐指数
3
解决办法
5712
查看次数

始终首先使用零对python Django查询进行排序,然后是正数,然后是负数

我将 Django 对象设置为:

class Example(models.Model):
    count = models.CharField(default="0")
Run Code Online (Sandbox Code Playgroud)

因此,如果我有一些对象ex1, ex2, ex3ex4它们的计数分别为 -1、0、5、-6。我希望能够查询对象并将它们排序为[0, 5, -6, -1]任何零首先出现的顺序,然后是正数,然后是负数,同时每个部分也按升序排列。我正在考虑使用类似的东西,Example.objects.order_by('count')但没有找到一种方法来使用像这样的自定义函数来做到这一点

我正在查看的另一条路线如下所示:

objs = Example.objects.all()
sorted_objs = sorted(objs, key = lambda o: int(o.count))
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 sorted 方法先对零进行排序?我无法找到一个。

我使用的最后一种方法是:

objs = Example.objects.all()
zero_objs = []
positive_objs = []
negative_objs = []
for obj in objs:
    if obj.count == 0:
        zero_objs.append(obj)
    elif obj.count < 0:
        negative_objs.append(obj)
    else:
        postitive_objs.append(obj)
sorted_objs = zero_objs + sorted(postitive_objs) + sorted(negative_objs) …
Run Code Online (Sandbox Code Playgroud)

python django python-3.x

5
推荐指数
1
解决办法
313
查看次数