Django - 通过国外 object 查找所有相关的 OneToOneField objects

Django - Finding all related OneToOneField objects through the foreign object

抱歉,如果标题不清楚,这就是我要完成的工作:

class Document(models.Model):
    processed = models.BooleanField(default=False)

class ParentClass(models.Model)
    document = models.OneToOneField(Document, on_delete=models.SET_NULL, null=True)

    class Meta:
        abstract = True

    def do_something():
        raise NotImplementedError()

class SubclassOne(ParentClass):
    # Some fields.
    def do_something(self):
        # Something specific to this subclass

class SubclassTwo(ParentClass):
    # Some other fields.
    def do_something(self):
        # Something specific to this subclass

我的第一个想法是尝试通过 ParentClass

进行查询
ParentClass.objects.filter(document__processed=False)

但这不起作用,因为 parent class 是 abstract

现在我已经尝试通过 Document object

Document.objects.filter(processed=False)

但似乎没有办法通过每个人 Document 来查找相关的 object。我不确定这是否是一个好的解决方案,因为 ParentClassDocument 的紧密耦合,不需要了解 ParentClass 的实现。

ParentClass.objects.filter(document__processed=False)

这会将 return 所有已处理的文档设置为 False

您可以找到所有反向相关的字段名称,并可以如下循环:

documents = Document.objects.filter(processed=False)
reverse_related_fields = Document._meta.get_fields()

for document in documents:
    for reverse_related_field in reverse_related_fields:
        if reverse_related_field.one_to_one:
            attr = getattr(document, f"{reverse_related_field.name}_set")
            try:
                attr.get().do_something
            except Exception:
                pass