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。我不确定这是否是一个好的解决方案,因为 ParentClass
与 Document
的紧密耦合,不需要了解 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
抱歉,如果标题不清楚,这就是我要完成的工作:
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。我不确定这是否是一个好的解决方案,因为 ParentClass
与 Document
的紧密耦合,不需要了解 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