django获得相关对象

时间:2013-03-29 02:07:50

标签: python django

我有一个包含以下内容的模型:

class Campaign(models.Model):
    campaign_name       = models.CharField(max_length=120) 
.
.
.

class Character(models.Model):
    name            = models.TextField(max_length=50)
.
.
.
    def __unicode__(self):
        return u'%s' % (self.name)

class Rank(models.Model):
    campaign_id     = models.ForeignKey('Campaign')
    character_id    = models.ManyToManyField(Character)
    rank           = models.IntegerField(blank=True)
.
.
.

在我的模板中显示了广告系列的所有详细信息我还希望包含该特定广告系列的字符及其排名,我已经尝试过GenericRelation路线并反复遍历而没有运气。我在django 1.5.1

1 个答案:

答案 0 :(得分:3)

从这看起来人物直接与广告系列无关,而只是通过他们的排名。正确的吗?

在这种情况下,根据广告系列campaign,与广告系列相关联的所有排名均为campaign.rank_set(您可以通过在排名的ForeignKey上为广告系列指定related_name来更改名称)

对于你这样获取的每个等级,假设你循环设置并调用各个等级rank,你可以找到带有rank.character_id的字符集并像你一样循环它们排名。

如果你有角色对象并希望找到与之关联的所有等级,那么你可以character.rank_set

你应该重新考虑一下你的术语,但我不能告诉你如何在不知道rank究竟是什么的情况下以及为什么它与其他模型相关的情况下如何做到这一点。

另外,请记住,就像现在一样,角色可以有多个等级。如果您希望字符只有一个排名,那么您需要从排名中删除ManyToMany字段,而是将ForeignKey字段放在字符上排名。

{% for rank in campaign.rank_set %}
  <p>Characters for {{ rank }}:</p>
  <ul>
    {% for character in rank.character_id %}
      <li>{{ character }}</li>
    {% endfor %}
  </ul>
{% endfor %}