来自django中多个模型的复杂查询
Complex Query from several models in django
我正在尝试查询三个模型。我需要获取商店区域位置中的产品数量。这些是我的模型:
class Store(models.Model):
name = models.CharField(max_length=255)
logo = models.URLField(null=True, blank=True)
user = models.OneToOneField(get_user_model(), models.CASCADE,
related_name="user_store")
region = models.CharField("Departamento", max_length=100)
city = models.CharField("Ciudad", max_length=100)
class Product(models.Model):
name = models.CharField("Nombre del Producto", max_length=255)
description = models.TextField()
stock = models.PositiveIntegerField()
seller = models.ForeignKey(User, on_delete=models.CASCADE)
产品与用户相关,与店铺相关,我想做的是这样的:
{
"Risaralda": 1523,
"Cundinamarca": 8541
}
其中键 "Risaralda" 和 "Cundinamarca" 是地区,值是这些地方的产品数量
我试过这样的东西
products = Product.objects.filter(
seller__user_store__region__in=Store.objects.filter()
.values("region").distinct())
我在商店区域有产品,但我需要计算每个商店区域有多少产品
非常感谢
像这样应该可以解决问题:
from django.db.models import F
from django.db.models import Count
Product.objects.annotate(region=F('seller__user_store__region')).annotate(num_products=Count('id')).values_list('region', 'num_products')
我正在尝试查询三个模型。我需要获取商店区域位置中的产品数量。这些是我的模型:
class Store(models.Model):
name = models.CharField(max_length=255)
logo = models.URLField(null=True, blank=True)
user = models.OneToOneField(get_user_model(), models.CASCADE,
related_name="user_store")
region = models.CharField("Departamento", max_length=100)
city = models.CharField("Ciudad", max_length=100)
class Product(models.Model):
name = models.CharField("Nombre del Producto", max_length=255)
description = models.TextField()
stock = models.PositiveIntegerField()
seller = models.ForeignKey(User, on_delete=models.CASCADE)
产品与用户相关,与店铺相关,我想做的是这样的:
{
"Risaralda": 1523,
"Cundinamarca": 8541
}
其中键 "Risaralda" 和 "Cundinamarca" 是地区,值是这些地方的产品数量
我试过这样的东西
products = Product.objects.filter(
seller__user_store__region__in=Store.objects.filter()
.values("region").distinct())
我在商店区域有产品,但我需要计算每个商店区域有多少产品
非常感谢
像这样应该可以解决问题:
from django.db.models import F
from django.db.models import Count
Product.objects.annotate(region=F('seller__user_store__region')).annotate(num_products=Count('id')).values_list('region', 'num_products')