【发布时间】:2010-08-19 07:33:47
【问题描述】:
我正在构建一个与游戏成就有关的应用程序,并且我想为每个游戏显示一个列出相关成就的页面。就这样完成了。
但是,我还希望每个用户都能在该列表中看到他们完成了哪些成就。
我的模型是这样的:
class Achievement(models.Model):
game = models.ForeignKey(Game)
...
class Game(models.Model):
...
class GameProfile(models.Model):
achievements = models.ManyToManyField(Achievement, through='Achieved')
...
class Achieved(models.Model):
profile = models.ForeignKey(GameProfile)
achievement = models.ForeignKey(Achievement)
curr_count = models.PositiveSmallIntegerField()
在游戏模板页面中,我通过与Achievement模型的关系(即achievements = game.achievement_set.all)获取当前游戏的所有成就。然后我对它们执行{% for ach in achievements %} 并为每个输出一个<li>。
如果用户登录,我还想显示与成就关联的 curr_count。因此,我需要特定 GameProfile 的已实现对象列表(将其视为当前用户)。
问题是我不能做{% if ach in achieved %}(其中ach 是一个Achievement 实例并实现了一个Achieved QuerySet),显然。
我还认为我可以获得一个包含用户已取得成就的 QuerySet,但它缺少我想要显示的 curr_count。
我想我想要的是某种包含用户成就的列表或字典,我可以根据这些列表或字典来测试特定成就是否是成员,但它也会携带 curr_count 变量。另一种解决方案可能是以某种方式将curr_count 作为字段添加到成就对象的查询集(这将是用户已经实现的对象)。
您能建议如何在 django 中完成此操作吗?
【问题讨论】: