1

我有几个模型,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_versionof Master。如:

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

如何构建这样的过滤器?

4

1 回答 1

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对象保留在查询集中。

于 2019-07-15T19:22:24.790 回答