Допустим, у меня есть набор моделей Django:
class Article(models.Model):
title = models.CharField(max_length=100, default='')
content = models.TextField(default='', blank=False)
created_at = models.DateTimeField(auto_now=True)
creator = models.ForeignKey(User, null=True, blank=True)
score = models.ForeignKey('Score', blank=True, null=True)
points = models.ManyToManyField('Points')
class Score(models.Model):
value = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
creator = models.ForeignKey(User, null=True, blank=True)
class Points(models.Model):
value = models.DecimalField(max_digits=3, decimal_places=1)
caption = models.CharField(max_length=20, default='')
created_at = models.DateTimeField(auto_now_add=True)
creator = models.ForeignKey(User, blank=True, null=True)
А теперь я каким-то образом получаю экземпляр модели Score
(фактически не зная, что это модель Score
) и экземпляр модели Points
(опять же, не зная, что это модель Points
):
>>> type(s)
<class 'myapp.models.Score'>
>>> type(p)
<class 'myapp.models.Points'>
Теперь я могу получить доступ к набору связанных экземпляров Article
с помощью следующего кода:
>>> s.article_set
<django.db.models.fields.related.RelatedManager object at 0x10d1e8610>
>>> p.article_set
<django.db.models.fields.related.ManyRelatedManager object at 0x10d1e8850>
Но это тот случай, когда я знаю фактическую схему БД и знаю, что атрибуты называются article_set
. В моем случае я не знаю фактическую схему БД. И я хочу получить все атрибуты RelatedManager текущего экземпляра модели.
Я думаю, что это можно реализовать с помощью атрибута ._meta
, но мне не удалось сделать это при попытке. Поэтому мне, вероятно, понадобится настоящий рабочий пример чего-то вроде get_related_managers(self)
реализации метода.