我查询一个模型,
Members.objects.all()
Run Code Online (Sandbox Code Playgroud)
它返回说
Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
Run Code Online (Sandbox Code Playgroud)
我想要的是,知道最好的Django方法来触发group_by查询到我的数据库,就像,
Members.objects.all().group_by('designation')
Run Code Online (Sandbox Code Playgroud)
哪个当然不起作用.我知道我们可以在"django/db/models/query.py"上做一些技巧,但我很想知道如何在没有修补的情况下做到这一点.
我有一个看起来像这样的模型:
class Category(models.Model):
name = models.CharField(max_length=60)
class Item(models.Model):
name = models.CharField(max_length=60)
category = models.ForeignKey(Category)
Run Code Online (Sandbox Code Playgroud)
我想要为每个类别选择项目的计数(只是计数),所以在SQL中它就像这样简单:
select category_id, count(id) from item group by category_id
Run Code Online (Sandbox Code Playgroud)
有没有相当于这样的"Django方式"?或者纯SQL是唯一的选择吗?我熟悉Django中的count()方法,但我不知道group by是如何适合的.
令人惊讶的是我找不到通过查询建立组的方法.
我有一个查询集qs,我试图通过组some_prop.val,考虑qs被排除的条目,其中some_prop是None.
让我们说值是[1, 2, 3],然后我会在这样的结果之后:
{1: entries1, 2: entries2, 3: entries3}
Run Code Online (Sandbox Code Playgroud)
Django ORM是否提供任何功能来分组这样的结果?
我正在编写一个Python/Django应用程序来进行一些库存分析.
我有两个非常简单的模型,如下所示:
class Stock(models.Model):
symbol = models.CharField(db_index=True, max_length=5, null=False, editable=False, unique=True)
class StockHistory(models.Model):
stock = models.ForeignKey(Stock, related_name='StockHistory_stock', editable=False)
trading_date = models.DateField(db_index=True, null=False, editable=False)
close = models.DecimalField(max_digits=12, db_index=True, decimal_places=5, null=False, editable=False)
class Meta:
unique_together = ('stock', 'trading_date')
Run Code Online (Sandbox Code Playgroud)
这是我填充的虚拟数据:
import datetime
a = Stock.objects.create(symbol='A')
b = Stock.objects.create(symbol='B')
c = Stock.objects.create(symbol='C')
d = Stock.objects.create(symbol='D')
StockHistory.objects.create(trading_date=datetime.date(2018,1,1), close=200, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,1,2), close=150, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,1,3), close=120, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,4,28), close=105, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,5,3), close=105, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2017,5,2), close=400, stock=b)
StockHistory.objects.create(trading_date=datetime.date(2017,11,11), close=200, stock=b)
StockHistory.objects.create(trading_date=datetime.date(2017,11,12), close=300, stock=b)
StockHistory.objects.create(trading_date=datetime.date(2017,11,13), close=400, stock=b)
StockHistory.objects.create(trading_date=datetime.date(2017,11,14), close=500, …Run Code Online (Sandbox Code Playgroud) 我有一个数据库表:
servicenumber | meternumber | usagedatetime | usage
11111 | 22222 | 2019-01-01 | 1.85
11111 | 22222 | 2019-01-02 | 2.25
11111 | 22222 | 2019-01-03 | 1.55
11111 | 22222 | 2019-01-04 | 2.15
11111 | 33333 | 2019-02-01 | 2.95
11111 | 33333 | 2019-02-02 | 3.95
11111 | 33333 | 2019-02-03 | 2.05
11111 | 33333 | 2019-02-04 | 3.22
Run Code Online (Sandbox Code Playgroud)
如您所见,一个服务编号可以与多个仪表编号相关联。将服务编号视为不变的地理位置的唯一标识符。
我有一个 Django 模型:
class MeterUsage(models.Model):
objectid = models.IntegerField(
db_column='OBJECTID', unique=True, primary_key=True)
servicenumber = models.IntegerField(
db_column='serviceNumber', …Run Code Online (Sandbox Code Playgroud) 我有这个简单的SQL查询 -
SELECT pid, COUNT(*) AS docs FROM xml_table WHERE suid='2' GROUP BY pid;
Run Code Online (Sandbox Code Playgroud)
我如何使用Django ORM(即django模型)获得此功能.基本上我没有得到怎么办GROUP BY?