我有两个样本模型:
class Property(models.Model):
address = models.CharField(max_length=45)
longitude = models.FloatField(null=True, blank=True)
latitude = models.FloatField(null=True, blank=True)
class Business(models.Model):
address = models.CharField(max_length=45)
name = models.CharField(max_length=45)
如果模型中没有fk关系,我如何查询商家并获取其名称,纬度和经度?目前,我正在运行两个查询并对它们进行迭代以生成一个字典。
我知道这可能是原始的,但我希望它可以通过ORM完成。
答案 0 :(得分:0)
唯一的方法是通过address
属性(两个模型中的公共属性)加入。假设它们是相同的,并且地址仅与一个企业相关。
business = Business.objects.get(pk=your_businness_id)
property = Property.objects.filter(address=business.address)[0] # be careful here, because may be you have d
备注:强>
1 - 如果我以前的分娩错误,你需要添加一个ForeignKey。
2 - 如果您想通过其他属性加入,则无法添加ForeignKey
。
答案 1 :(得分:0)
这是我在没有PURELY的情况下最接近的原因:
businesses = Business.objects.extra(
select={
"lat": "SELECT latitude FROM property_table WHERE business_table.address = property_table.address",
"lon": "SELECT longitude FROM property_table WHERE business_table.address = property_table.address"
}
)
答案 2 :(得分:-1)
ORM委托加入和检索相关数据到数据库。正如文档所说,Django" tak[es] care of the SQL JOINs for you automatically, behind the scenes"。如果您未在模型中指定外键,则数据库不具有链接两个表的任何概念。 Django ORM无法在不进行额外工作的情况下跨越两个表之间的关系 - 无论是在原始SQL中还是在Python中手动连接多个ORM查询。