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の場合と同じように文字のセットを見つけてrank.character_idループすることができます。

キャラクター オブジェクトがあり、それに関連付けられているすべてのランクを検索する場合は、次のようにしますcharacter.rank_set

rankおそらく命名法を再考する必要がありますが、 aが正確に何のためのものであり、なぜそれが他のモデルに関連しているのかについてもっと知らなければ、その方法についてアドバイスすることはできません.

また、現時点では、キャラクターは複数のランクを持つことができることに注意してください. キャラクターのランクを 1 つだけにしたい場合は、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 に答える