过滤周期性关系

时间:2019-07-15 18:24:14

标签: django django-models

我有两个模型,Data,其中包含某些数据的不同版本,以及Master,其跟踪所有版本,以及一个current_version。 像这样:

class Master(models.Model):
    current_version = models.OneToOneField('Object', related_name='+')

class Data(models.Model):
    master = models.ForeignKey('Master', related_name='data')

我想获取Data的所有current_version实例。如:

Data.objects.filter(Q(master__current_version = ???))

如何构造这样的过滤器?

1 个答案:

答案 0 :(得分:0)

如果为current_version提供一个相关名称(不同于'+'),例如:

class Master(models.Model):
    current_version = models.OneToOneField(
        'Data',
        related_name='current_version_master'
    )

class Data(models.Model):
    master = models.ForeignKey('Master', related_name='data')

您可以使用以下方法进行过滤:

Data.objects.filter(current_version_master__inull=False)

因此,您在此处检查关系“反向”是否找到了Master对象,如果找到了,我们将Data对象保留在查询集中。