通过 Django 中的四种模型进行查询

Querying through four models in Django

我有一个类似于此(简化)的数据模型:

class Mobility(models.Model):
    pass

class Transfer(models.Model):
    mobility = models.ForeignKey(Mobility)

class Organism(models.Model):
    pass

class TransferLine(models.Model):
    transfer = models.ForeignKey(Transfer)
    organism = models.ForeignKey(Organism)

我有一个 Mobility 的实例和一个 Organism 的实例,我想获取与这两者相关的所有 TransferLine 实例(到 Organism 直接,并通过 Transfer).

Mobility

这个问题与this other question的不同之处在于,在我的情况下,我需要经历两个关系,还有一个复合条件。

只需使用 double-underscore notation 进行跨关系的查找。在这种情况下,可以这样做:

transfer_lines = TransferLine.objects.filter(transfer__mobility=mobility, 
                                             organism=organism)

另一种方法是使用 ForeignKey reverse relation:

tlines = my_organisam.transferline_set.filter(transfer__mobility=my_mobility)