【发布时间】:2018-03-15 10:45:14
【问题描述】:
假设我在 Django 中有 3 个模型
class Instrument(models.Model):
ticker = models.CharField(max_length=30, unique=True, db_index=True)
class Instrument_df(models.Model):
instrument = models.OneToOneField(
Instrument,
on_delete=models.CASCADE,
primary_key=True,
)
class Quote(models.Model):
instrument = models.ForeignKey(Instrument, on_delete=models.CASCADE)
我只想查询与“DF”类型的工具相对应的所有报价。在 SQL 中,我会在字段 id 上执行 Quote 和 Instrument_df 的连接。
使用 Django 的 ORM 我出来了
Quote.objects.filter(instrument__instrument_df__instrument_id__gte=-1)
我认为这样做可以,但我看到两个缺点:
1) 我要加入 3 个表,而实际上不需要涉及表 Instrument。
2) 我必须插入微不足道的 id > -1 条件,该条件始终成立。这看起来非常人为。
这个查询应该怎么写?
谢谢!
【问题讨论】:
-
Instrument_df中还有其他字段吗?如果不是,您的模型似乎是错误的...... -
@bruno 实际上,我只是删除了其他所有内容并保留了这些模型之间的引用。很抱歉没有澄清它。