我想反思一个模型并列出其所有后向泛型关系。
我的模型看起来像这样:
class Service(models.Model):
host = models.ForeignKey(Host)
statuses = generic.GenericRelation(Status)
Status对象如下所示:
class Status(TrackedModel):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
class Meta:
verbose_name_plural = 'statuses'
我想以编程方式了解statuses
是服务模型的通用关系。这可能吗? Status._meta.fields
不会显示statuses
,Status._meta.get_all_field_names()
会显示,只显示其他不需要的内容。
我认为这可能是一种可能的解决方案,但对我来说这似乎很麻烦。我很想听到一个更好的。
from django.db.models.fields import FieldDoesNotExist
from django.contrib.contenttypes import generic
generic_relations = []
for field_name in Service._meta.get_all_field_names():
try:
field = Service._meta.get_field(field_name)
except FieldDoesNotExist:
continue
if isinstance(field, generic.GenericRelation):
generic_relations.append(field)
谢谢!
答案 0 :(得分:3)
GenericRelation
与ManyToManyField
的工作方式类似。您可以在Service._meta.many_to_many
中找到它:
filter(lambda f:isinstance(f, generic.GenericRelation), Service._meta.many_to_many)