【发布时间】:2019-10-18 18:23:16
【问题描述】:
我有以下模型设计:
class Boat(models.Model):
name = models.CharField(max_length=30, null=False)
harbour = models.ForeignKey(Harbour, null=True, on_delete=models.SET_NULL)
class Harbour(models.Model):
name = models.CharField(max_length=60)
city = models.ForeignKey(City, null=True, related_name='city_harbours', on_delete=models.SET_NULL)
class City(models.Model):
name = models.CharField(max_length=80)
county = models.CharField(max_length=30, null=True)
class NearestCity(models.Model):
city = models.ForeignKey(City, related_name='city', null=False, on_delete=models.CASCADE)
near_city = models.ForeignKey(City, related_name='near_city', null=False, on_delete=models.CASCADE)
weight = models.DecimalField(null=False, max_digits=25, decimal_places=20)
简要说明:
Boat属于Harbour,Harbour属于City。并非所有城市都有港口相关的。
NearestCity是一个表格,其中存储了一个城市与其他城市的距离:weight是一个十进制值,表示 city 与 _near_city_ 的距离。 “权重”值越小,城市与 near_city 越接近。例如:
city near_city weight
---- --------- ------
London Rome 2.210103
London Manchester 0.113134
这意味着曼彻斯特比罗马更靠近伦敦。
要解决的问题:
给定一个没有任何港口相关的城市的名称,例如柏林,想要归还那些至少有一个港口相关的最近城市的所有船只。这艘船的查询集必须由weight DESC 订购。
我真的是 django 查询集的新手,我尝试使用 annotate 和 subqueries、aggregations 等来解决。但我无法实现。
【问题讨论】: