我有像这样的ORM
test('should render ExpenseList with expenses', () => {
const wrapper = shallow(<ExpenseList.wrappedComponent
RootStore = {
{
ExpensesStore: {
expenses
},
FiltersStore: {
filters: {
text: 'e',
sortBy: 'date',
startDate: '',
endDate: ''
}
}
}
}
/>)
expect(wrapper).toMatchSnapshot();
})
想象一下,我有以下条目
from django.db import models,
class MyObject(models.Model):
class Meta:
db_table = 'myobject'
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=48)
status = models.CharField(max_length=48)
我为了获得一个类似下面的查询集而必须进行的django ORM查询是什么
1 | foo | completed
2 | foo | completed
3 | bar | completed
4 | foo | failed
我从以下开始,但我不知道如何合并&#34;两列:
[{'name': 'foo', 'status_count': 'completed: 2, failed: 1'},
{'name': 'bar', 'status_count': 'completed: 1'}]
所有这一切的目标是获得一个表格,我可以显示如下内容:
from django.db.models import Count
models.MyObject.objects.values(
'name',
'status'
).annotate(my_count=Count('id'))
答案 0 :(得分:3)
这应该按预期工作:
test = MyObject.objects.values('name').annotate(
total_completed=Count(
Case(
When(
status='completed', then=1), output_field=DecimalField()
)
),
total_failed=Count(
Case(
When(status='failed', then=1), output_field=DecimalField()
)
)
)
答案 1 :(得分:0)
你需要包含一个&#34; order_by&#34;在查询结束时将类似项目组合在一起。
这样的事情应该有效:
from django.db.models import Count
models.MyObject.objects.values(
'name',
'status'
).annotate(my_count=Count('id')).order_by()
编辑:对不起,我知道这并没有回答关于合并列的问题......我不认为你可以在一个查询中实际完成它,尽管你可以循环查看结果非常容易,并使您的输出表。