Django ORM加入没有明确的外键

时间:2015-03-11 18:49:47

标签: django python-2.7 django-models django-1.5

我有两个样本模型:

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完成。

3 个答案:

答案 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查询。