标签: django-orm

Django annotate和values():'group by'中的额外字段会导致意外结果

我必须遗漏一些明显的东西,因为这种简单的要求不符合预期.这是我的模型类:

class Encounter(models.Model):
    activity_type = models.CharField(max_length=2, 
                           choices=(('ip','ip'), ('op','op'), ('ae', 'ae')))
    cost = models.DecimalField(max_digits=8, decimal_places=2)
Run Code Online (Sandbox Code Playgroud)

我想找到每种活动类型的总费用.我的查询是:

>>> Encounter.objects.values('activity_type').annotate(Sum('cost'))
Run Code Online (Sandbox Code Playgroud)

产量:

>>> [{'cost__sum': Decimal("140.00"), 'activity_type': u'ip'}, 
     {'cost__sum': Decimal("100.00"), 'activity_type': u'op'}, 
     {'cost__sum': Decimal("0.00"), 'activity_type': u'ip'}]
Run Code Online (Sandbox Code Playgroud)

在结果集中有2个'ip'类型遇到.这是因为它不是仅activity_type活动类型和成本分组,而是没有给出预期结果.生成的SQL查询是:

SELECT "encounter_encounter"."activity_type", 
    SUM("encounter_encounter"."total_cost") AS "total_cost__sum" 
    FROM "encounter_encounter" 
    GROUP BY "encounter_encounter"."activity_type", 
             "encounter_encounter"."total_cost"        <<<< THIS MESSES THINGS
    ORDER BY "encounter_encounter"."total_cost" DESC
Run Code Online (Sandbox Code Playgroud)

如何使这个查询按预期工作(如果我没有弄错的话,如文档所暗示的那样)并使它只进行一个分组activity_type

django annotations group-by django-orm

3
推荐指数
1
解决办法
5378
查看次数

在 Django 中使用 through 查询多对多关系

我是 Django 的新手,试图构建这个查询让我很头疼。

  • 我有一个BaseProfileOneToOne字段连接到User
  • 我正在专门将CustomerProfile 中的配置文件与OneToOne字段连接到BaseProfile
  • 一个CustomerProfile通过一个RelatedCustomer模型与其他CustomerProfile(所以它本身)有一个多对多的关系。
  • RelatedCustomer 中,我指定了from_customerto_customer 外键



也许通过图像您可以更好地理解。

在此处输入图片说明

我的问题
给定一个 user.id,我需要知道他所连接的客户的所有其他 user.id(因此通过from_customerto_customer):

所以基本上,首先我需要使用反向查找从 User 挖掘到 RelatedCustomer ,获取所有集合,然后返回知道集合中每个客户的user.id

编辑2:

到目前为止我所达到的:

# This gives me back a customer profile given a user.id (2)
cm = CustomerProfile.objects.get(base_profile__user=2)

# M2M lookup. Given one customer …
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm django-queryset

3
推荐指数
1
解决办法
1693
查看次数

django - 获取几个时期的最大值

我刚开始使用django.我的模型非常简单,包含时间戳和值(温度,每分钟更新).我想检索过去7天中每天的最大值.

我需要查询7次还是有"快捷方式"?

python django django-models django-orm django-queryset

3
推荐指数
1
解决办法
171
查看次数

Django 多对一关系过滤器集

我有几个模型设置,如下所示:

Group(models.Model):
    name = models.TextField(max_length=255)

Thing(models.Model):
    location = models.TextField(max_length=255)
    group = models.ForeignKey(Group)
Run Code Online (Sandbox Code Playgroud)

这只是说明关系的一个例子,所以请原谅任何语法错误。

我的问题是,如何找到具有一组特定位置的组?我应该能够使用以下方法访问与组关联的事物:

Group.thing_set
Run Code Online (Sandbox Code Playgroud)

对?那么有什么方法可以根据thing_set中的项目进行过滤吗?我在想一些类似的事情。

Group.objects.filter(thing_set.location in ["Location A", "Location B"]).all()
Run Code Online (Sandbox Code Playgroud)

希望这能将包含来自位置 A 和位置 B 的内容的每个组都返回给我。任何建议或朝正确方向的推动都会非常有帮助!

谢谢。

python django django-orm

3
推荐指数
1
解决办法
9916
查看次数

如何使用字段名称获取 ManyToMany Manager 对象

我有一个带有多个 ManyToMany 字段的 Django 模型。我想根据字段名称在此模型的方法中动态查询其中一个。

如何仅使用字段名称获取 ManyToMany 管理器对象。是否可以?

django django-orm django-managers

3
推荐指数
1
解决办法
631
查看次数

Django ORM过滤器默认值,返回所有对象

我有一个模型Book,它有一个字段year_of_publishing。用户输入年份,我想过滤Book's set 以获取该年出版的所有书籍。

year = self.cleaned_data.get('year', SOME_DEFAULT_VALUE)
books = Book.objects.filter(year_of_publishing=year)
Run Code Online (Sandbox Code Playgroud)

然而,用户可能会将year字段留空,我想设置一些默认值,在.filter函数中获取哪个Django ORM 将返回所有书籍,就像这个过滤器根本不存在。我应该使用什么值?我想它应该是类型无关的,所以我可以将它用于 Char-、Choice- 和其他类型的字段。

python django django-models django-orm

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

如何在Django中进行条件查询

我试图通过计算字段进行过滤,其中计算取决于其他字段的值.

我正在尝试过滤sales_price(计算字段),其中sales_price定义如下伪代码

if discount is NULL                                                             
    sales_price = price                                                         
else                                                                            
    sales_price = price - price*discount/100 
Run Code Online (Sandbox Code Playgroud)

最终目标是sales_price按范围过滤:

filter(sales_price__range=(price_min, price_max))                                   
Run Code Online (Sandbox Code Playgroud)

这是我的模型:

class Product(models.Model):                                                
  price = models.IntegerField()                                             
  discount = models.IntegerField(blank=True, null=True)                                                                             
Run Code Online (Sandbox Code Playgroud)

python django django-orm

3
推荐指数
1
解决办法
875
查看次数

prefetch_related()的参数无效

我正在尝试使用PersonScore在这3个表上进行内部联接,但找不到人类型。我究竟做错了什么?

楷模:

class PersonScore(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    person = models.ForeignKey(‘Person’)

class Person(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    name = models.CharField(max_length=255)

class PersonType(models.Model):
    person = models.ForeignKey(‘Person’)
    type = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

码:

PersonScore.objects.filter(person__name="Bob").prefetch_related("person__persontype")
Run Code Online (Sandbox Code Playgroud)

错误:

Cannot find 'persontype' on Person object, 'person__persontype' is an invalid parameter to prefetch_related()
Run Code Online (Sandbox Code Playgroud)

码:

PersonScore.objects.filter(person__name="Bob").prefetch_related("person__persontype_set")
Run Code Online (Sandbox Code Playgroud)

错误:

KeyError: (1L,)
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm

3
推荐指数
1
解决办法
2124
查看次数

Django-提高“ startswith”性能

如何提高以下查询的性能?

class Worker(models.Model):
    name = models.CharField(max_length=32, db_index=True)

# This line is slow:
Worker.objects.filter(name__startswith='John')
Run Code Online (Sandbox Code Playgroud)

我已经在模型中添加了索引,但是...根本不使用它。但是,在没有以下情况的情况下进行普通过滤时,索引确实起作用startswith

# This line is fast:
Worker.objects.filter(name='John')
Run Code Online (Sandbox Code Playgroud)

为什么不使用索引startswith

python sql django postgresql django-orm

3
推荐指数
1
解决办法
183
查看次数

模型可以有一个ForeignKey对象列表吗?

我想在商店和类别之间创建一种关系,其中商店可能具有多个类别,并且我正在考虑在商店对象内部的变量中创建类别对象列表的可能性。还是更好的方法是什么?

class Category(models.Model):
    ...

class Shop(models.Model):
    categories = list(models.ForeignKey(Category,...))
    ...
Run Code Online (Sandbox Code Playgroud)

django django-orm

3
推荐指数
1
解决办法
59
查看次数