1
比方說,我有一組的Django模型:如何從特定的Django模型實例獲取所有RelatedManagers?
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
。在我的情況下,我不知道實際的數據庫scema。我想獲取當前模型實例的所有RelatedManager屬性。
我認爲有可能通過._meta
屬性來實現這一點,但我在嘗試時沒有做到這一點。所以我可能需要一個類似get_related_managers(self)
方法實現的實際工作示例。
非常感謝,我發現'_meta'屬性時不知何故錯過了這個。 – ikostia
沒問題。希望有一個更好的方法來做到這一點,因爲非公開屬性(帶有下劃線的屬性,例如'_meta')「不打算被第三方使用; [它不是]保證[d]不是 - 公共屬性不會更改,甚至不會被刪除。「 (來自http://www.python.org/dev/peps/pep-0008/)。但我看不到一個更好的方法來做到這一點。 – Will
實際上,有很多事情你不能用標準Django模型API來做,而且只能通過_meta屬性來完成。有時候,Django真的很糟糕:) – ikostia