Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 计算相关表中的记录数-循环_Django_Join_Annotate - Fatal编程技术网

Django 计算相关表中的记录数-循环

Django 计算相关表中的记录数-循环,django,join,annotate,Django,Join,Annotate,我看了大约50个堆栈溢出问题以及许多谷歌文章,但我的头很痛,我只是不明白这一点 我有以下数据库表和字段: Cases: --id --Name Information: --id --case_id --detail 我想做的是计算每个案例有多少信息记录 因此,在psuedo代码中,它类似于: SELECT COUNT(*) FROM Information WHERE case_id=id 或类似的。我想要的输出是这样的: SELECT COUNT(*) FROM Information

我看了大约50个堆栈溢出问题以及许多谷歌文章,但我的头很痛,我只是不明白这一点

我有以下数据库表和字段:

Cases:
--id
--Name

Information:
--id
--case_id
--detail
我想做的是计算每个案例有多少信息记录

因此,在psuedo代码中,它类似于:

SELECT COUNT(*) FROM Information WHERE case_id=id
或类似的。我想要的输出是这样的:

SELECT COUNT(*) FROM Information WHERE case_id=id
案例1有43条信息记录 案例2有16条信息记录 案例3有8项信息记录

等等

我主要尝试在django中使用annotate函数,然后在models.py文件中指定外键

我想我已经把自己弄糊涂了,因为我现在已经尝试了很多东西

views.py:

def案例(请求):
#不起作用-number=Cases.objects.annotate(Count('id'))
#不起作用-问题=信息.对象.注释(信息的数量记录=计数('id'))
#不起作用-结果=信息.objects.annotate(信息记录数=计数((Case)(当(Cases.id==信息.Case\id),输出字段=整型字段()))
models.py:

类案例(models.Model):
id=models.AutoField(db_column='id',primary_key=True)#字段名改为小写。
name=models.CharField(db_column='Case_name',max_length=255)#字段名小写。
##这是一次试图让它发挥作用的尝试
##information=models.ForeignKey(“information”,on_delete=models.CASCADE,db_column=“id”)
定义(自我):
返回self.name
类元:
托管=错误
db_表=‘案例’
详细名称复数=“案例”
类别信息(models.Model):
id=models.AutoField(db_column='id',primary_key=True)#字段名改为小写。
case_id=models.IntegerField(db_column='case_id',blank=True,null=True)#字段名改为小写。
类元:
托管=错误
db_表='信息'
详细名称复数=“信息”
代码就是不起作用,它通常运行时不会出错,但不会输出任何内容,或者只输出没有我想要的详细信息的对象。

IIUC:

from django.db.models import Count, Q

Information.objects.filter(case_id='foo'
).annotate(case_count=Count('case_id', filter=Q(case_id='foo'))
我是从警察那里得到这个答案的

如果这不起作用,请告诉我。

IIUC:

from django.db.models import Count, Q

Information.objects.filter(case_id='foo'
).annotate(case_count=Count('case_id', filter=Q(case_id='foo'))
我是从警察那里得到这个答案的


如果这不起作用,请告诉我。

我想您可以使用以下方法尝试:


我认为您可以通过以下方式尝试:


这是一个常见问题。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。请参见文本上方的投票箭头(&S)。除非我们努力(重新)写清楚,否则我们无法推理、交流或搜索。请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。(调试基础。)对于包含DBMS/product和DDL的SQL,其中包括约束和索引以及表格格式的基表初始化。您好,我在models.py中的Case类中有这个:information=models.ForeignKey(“information”,on_delete=models.CASCADE,db_column=“id”)我想我可能需要另一个外键,虽然我不明白那个评论。但请通过编辑澄清,而不是评论。在SQL中查询不需要PS FK。您可能希望与ORM中的一个字段关联的字段使用自动查询/命令组合。这是一个常见问题解答。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。请参见文本上方的投票箭头(&S)。除非我们努力(重新)写清楚,否则我们无法推理、交流或搜索。请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。(调试基础。)对于包含DBMS/product和DDL的SQL,其中包括约束和索引以及表格格式的基表初始化。您好,我在models.py中的Case类中有这个:information=models.ForeignKey(“information”,on_delete=models.CASCADE,db_column=“id”)我想我可能需要另一个外键,虽然我不明白那个评论。但请通过编辑澄清,而不是评论。在SQL中查询不需要PS FK。您可能希望与ORM中的一个字段关联的字段使用自动查询/命令组合。嘿,这成功了-谢谢!关于另外一个问题,我正在努力循环每个案例的输出。所以基本上,我想加载所有案例,对于每个案例,我想查找信息对象的数量。在普通Python中,我会创建自己的函数,但我有点不确定这是否是Django的正确方法。就您的模型而言,Case和信息之间没有ForeignKey关系。所以我认为它不会像那样工作。因此,要么将其更改为FK以使用.annotate,要么您需要手动执行,这将增加DB命中率。嘿,这成功了-谢谢!关于另外一个问题,我正在努力循环每个案例的输出。所以基本上,我想加载所有案例,对于每个案例,我想查找信息对象的数量。在普通Python中,我将创建自己的函数