0

我有 2 个模型:

class Call(models.Model):
    date_time_created = models.DateTimeField(auto_now_add = True)
    comment = models.CharField(max_length = 300, blank= True, null=True)
    bought_record = models.ForeignKey('BoughtRecords')

class BoughtRecords(models.Model):
    date_time_bought = models.DateTimeField(auto_now_add= True)
    bought_packet = models.ForeignKey('BoughtPackets')

我写了2个查询:

  1. Q1 = Q(call__result = 1)
    company_for_call = BoughtRecords.objects.exclude(Q1)

  2. company_for_call = BoughtRecords.objects.exclude(call__result = 1)

    我期望这个查询有同样的行为。它们生成略有不同的 sql 查询(我不擅长原始 sql=))。

我想这就是为什么 BoughtRecord 并不总是存在 Call 的原因,或者可能是 Q-objects 不能与反向外键一起正常工作。请解释一下这种行为,因为我经常从 Q 对象编译复杂的查询,有时会得到意想不到的结果。我想知道乍一看结果必须是相似的,但实际上却不同的情况。

4

1 回答 1

1

我可以看到,在使用的情况下,QINNER_JOIN一段WHERE NOT时间调用exclude查询的直接结果是 a nested select。在语义上它们是等价的。INNER JOIN发生这种情况时,将排除NULL上的引用。foreign_key在嵌套查询的情况下target_call.bought_record_id = NULL是明确指定的。所以结果不应该有任何差异。

于 2012-08-20T14:59:56.090 回答