0

我有一个模型,其中包括:

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

4

1 回答 1

3

由此看来,角色与战役没有直接关系,而只是通过他们的排名。正确的?

在这种情况下,给定活动campaign,则与活动相关的所有排名都是(您可以通过在排名的 ForeignKey 上campaign.rank_set指定活动来更改名称)。related_name

对于您这样获取的每个排名,假设您循环遍历集合并调用单个排名rank,您可以找到字符集rank.character_id并循环遍历它们,就像您使用排名一样。

如果您有角色对象并想查找与其关联的所有等级,那么您可以执行character.rank_set.

rank您可能应该重新考虑您的命名法,但如果不了解更多关于 a的确切含义以及它与其他模型相关的原因,我无法建议您如何做到这一点。

另外,请记住,就像现在一样,一个角色可以有多个等级。如果您希望字符只有一个等级,那么您需要从等级中删除 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 %}
于 2013-03-29T02:16:06.823 回答