我必须遗漏一些明显的东西,因为这种简单的要求不符合预期.这是我的模型类:
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 的新手,试图构建这个查询让我很头疼。
也许通过图像您可以更好地理解。
我的问题:
给定一个 user.id,我需要知道他所连接的客户的所有其他 user.id(因此通过from_customer和 to_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.我的模型非常简单,包含时间戳和值(温度,每分钟更新).我想检索过去7天中每天的最大值.
我需要查询7次还是有"快捷方式"?
我有几个模型设置,如下所示:
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 的内容的每个组都返回给我。任何建议或朝正确方向的推动都会非常有帮助!
谢谢。
我有一个带有多个 ManyToMany 字段的 Django 模型。我想根据字段名称在此模型的方法中动态查询其中一个。
如何仅使用字段名称获取 ManyToMany 管理器对象。是否可以?
我有一个模型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- 和其他类型的字段。
我试图通过计算字段进行过滤,其中计算取决于其他字段的值.
我正在尝试过滤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) 我正在尝试使用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) 如何提高以下查询的性能?
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?
我想在商店和类别之间创建一种关系,其中商店可能具有多个类别,并且我正在考虑在商店对象内部的变量中创建类别对象列表的可能性。还是更好的方法是什么?
class Category(models.Model):
...
class Shop(models.Model):
categories = list(models.ForeignKey(Category,...))
...
Run Code Online (Sandbox Code Playgroud)