【问题标题】:giving extra information on model __unicode__ from another model提供来自另一个模型的模型 __unicode__ 的额外信息
【发布时间】:2014-03-27 13:22:11
【问题描述】:

我有两个模型控制一个战利品系统。

class Boss(models.Model):
    name = models.CharField(max_length=255)
    instance = models.CharField(max_length=255)
    difficulty = models.ForeignKey(Difficulty)
    loot_table = models.ManyToManyField(Loot)


class Loot(models.Model):
    wh_item_id = models.CharField(verbose_name="Wowhead Item ID", max_length=255)
    wh_item_name = models.CharField(verbose_name="Wowhead Item Name", max_length=255)
    gear_type = models.CharField(max_length=255, blank=True, null=True)
    lockout_tier = models.IntegerField(blank=True, null=True)

    def __unicode__(self):
            return u'%s [%s]' % (self.wh_item_name, self.wh_item_id)

在 Loot 模型中,我返回 wh_item_name 和 wh_item_id,但我需要它返回的是 Loot.wh_item_name 和 [Boss.difficulty]。

但是看着这个我没有最微弱的线索从哪里开始,我已经尝试过滤在 loot_table 中找到 Loot 的老板模型,但我不能完全到达那里。

【问题讨论】:

    标签: django models


    【解决方案1】:

    不确定您的模型是否正确。 Boss 和 Loot 之间存在多对多关系,顾名思义,每个 Loot 都有多个 Boss。所以“boss.difficulty”没有单一的值,但可能有多个。

    如果这是你想要的,你可以简单地连接它们:

    ', '.join(self.boss_set.values_list('difficulty', flat=True)
    

    但我怀疑你真正想要的是从 Loot 到 Boss 的 ForeignKey,这意味着每个 Loot 只有一个 Boss,因此你可以简单地输出 self.boss.difficulty

    编辑

    def __unicode__(self):
        difficulties = ', '.join(self.boss_set.values_list('difficulty', flat=True)
        return u'%s [%s]' % (self.wh_item_name, difficulties)
    

    【讨论】:

    • 我是反过来的,但不久前又遇到了另一个问题,所以建议我这样做。
    • 一个boss也有很多物品,但是物品可能有不止一个boss。
    • 好的,所以你有充分的理由拥有多对多,在这种情况下你可以使用我上面给出的解决方案。
    • 我对如何实现它有点困惑。
    • 您可以将其分配给一个变量并使用它来代替self.wh_item_id
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2021-03-27
    • 2011-07-30
    相关资源
    最近更新 更多