Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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_Django Models - Fatal编程技术网

在Django中通过查询创建组

在Django中通过查询创建组,django,django-models,Django,Django Models,这是我的模型: from django.db import models # Create your models here. class Skill(models.Model): name = models.CharField(max_length=100) def __str__(self): return '%s' % self.name class AppForm(models.Model): creation_date = models.D

这是我的模型:

from django.db import models

# Create your models here.
class Skill(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return '%s' % self.name

class AppForm(models.Model):
    creation_date = models.DateField(db_index=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=100)
    ...
    preferred_skill = models.ManyToManyField(Skill,db_index=True)
    preferred_skill_other = models.CharField(max_length=250,default='')
    ...  
我想提出以下问题:

sqlite> SELECT "app_form_appform_preferred_skill"."skill_id",
        COUNT("app_form_appform"."id")
        FROM "app_form_appform"
        INNER JOIN "app_form_appform_preferred_skill"
        ON ("app_form_appform"."id" = "app_form_appform_preferred_skill"."appform_id")
        GROUP BY "app_form_appform_preferred_skill"."skill_id";
注意:app_form_appform_preferred_skill是django根据模型中指定的多对多关系创建的表


仅使用django ORM可以进行此查询吗?我尝试使用aggregate,但我无法让它完成此查询的功能,我的困难在于使用ORM获取GROUP BY子句。

您可以通过使用
Count
和以下命令来实现:

您可以获得与每个技能实例关联的表单总数:

>>> skills[0].form_count
您可以使用将每个实例表示为仅包含
id
form\u count
的字典:

>>> skills.values("id", "form_count")
<QuerySet [{'id': 1, 'form_count': 2}, {'id': 2, 'form_count': 3}, ...>
>技能值(“id”,“form\u count”)

您可以通过使用
计数
以及以下各项来实现:

您可以获得与每个技能实例关联的表单总数:

>>> skills[0].form_count
您可以使用将每个实例表示为仅包含
id
form\u count
的字典:

>>> skills.values("id", "form_count")
<QuerySet [{'id': 1, 'form_count': 2}, {'id': 2, 'form_count': 3}, ...>
>技能值(“id”,“form\u count”)