以Django模型格式转换SQL查询

以Django模型格式转换SQL查询,sql,django,join,django-models,count,Sql,Django,Join,Django Models,Count,我正在尝试将SQL查询转换为django格式,但由于我对django比较陌生,所以遇到了一些问题 我的问题是: select make_name, count(*) as count from main_app_make as make join main_app_model as model on make.id = model.make_id join main_app_vehicle as vehicle on model.id = vehicle.model_id group by ma

我正在尝试将SQL查询转换为django格式,但由于我对django比较陌生,所以遇到了一些问题

我的问题是:

select make_name, count(*) as count from main_app_make as make
join main_app_model as model on make.id = model.make_id
join main_app_vehicle as vehicle on model.id = vehicle.model_id
group by make.make_name
结果是:

Audi    1
Mercedes-Benz   2
我的模型:

class Make(models.Model):
    make_name = models.CharField(max_length=50)
    make_logo = models.CharField(max_length=400)

    def __str__(self):
        return self.make_name


class Model(models.Model):
    model_name = models.CharField(max_length=50)
    make = models.ForeignKey(Make, on_delete=models.CASCADE)

    def __str__(self):
        return self.model_name

class Vehicle(models.Model):
    type = models.ForeignKey(VehicleType, on_delete=models.CASCADE)
    model = models.ForeignKey(Model, on_delete=models.CASCADE)
    body_type = models.ForeignKey(Body, on_delete=models.CASCADE)
...

这就是我所尝试的:

options = Make.objects.all().values('make_name').annotate(total=Count('make_name'))

我认为您需要将儿童模型包括在
计数中

options = Make.objects.values('make_name').annotate(total=Count('model_set__vehicle_set'))

参考资料:

我认为您需要在
计数中包括子模型:

options = Make.objects.values('make_name').annotate(total=Count('model_set__vehicle_set'))

参考资料:

ORM查询对我来说似乎很好,你尝试时得到了什么?我得到了
奥迪1奔驰1
如果你尝试会发生什么:
options=Make.objects.prefetch\u相关('model\u set\u vehicle\u set')。值('Make\u name')。注释(total=Count('Make\u name'))
选择'main\u app\u Make`.'Make\u name`,Count(`main\u app\u make`.`make\u name`)作为'main\u app\u make'中的'total',按'main\u app\u make'分组。'make\u name'按NULL排序
生成此查询,我仍然得到与上面相同的结果。ORM查询对我来说很好,您尝试时得到了什么?我得到了
奥迪1奔驰1
如果您尝试会发生什么:
选项=make.objects.prefetch\u('model_set__u vehicle_set')。值('make_name')。注释(total=Count('make_name'))
选择'main_app_make`。'make_name`,Count('main_app_make`.'make_name`)作为'main_app_make`组的'main_app_make`总数。'make_name`订单为空
生成此查询,我仍然得到与上述相同的结果。