在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”)