我有三个类似的模型,
Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE )
city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True)
Product(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
price = models.FloatField()
geo_location = models.PointField(srid=4326, null=True, blank=True)
City(models.Model):
name = models.CharField(max_length=75)
geom = models.MultiPolygonField(srid=4326)
如果指定了相关城市,可以从 geo_location 字段中检索,例如:
city = City.objects.get(geom__contains=someproduct.geo_location)
或通过所有者的个人资料:
city = someproduct.owner.profile.city
让我们假设我有以下查询:
all_cities = City.objects.all()
products = Product.objects.filter(price__lt=2500)
我要实现的是 products 查询集
中 all_cities 查询集的每个实例的 products_count 属性也许循环可以解决此问题,但不知道如何实现,并且可能存在使用 Subquery 和 OuterRef
的另一种解决方案