モデルを振り返り、その下位ジェネリック関係をすべてリストアップしたいと思います。
私のモデルは次のようになります。
class Service(models.Model):
host = models.ForeignKey(Host)
statuses = generic.GenericRelation(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)
ありがとうございました!