我正在一个允许用户玩异步游戏的网站上创建。我正在使用 Python 2.7.5 运行 Django 1.5,并使用 Django 的本机用户身份验证 API。我没有创建自定义 User 模型,而是将每个用户链接到自定义 UserDetails 类。UserDetails 类的相关代码在这里:
class UserDetails(models.Model):
user = models.OneToOneField(User)
join_date = models.DateTimeField(auto_now_add=True)
games = models.ManyToManyField(Game, default=None)
每个游戏都使用 ManyToMany 字段链接到 UserDetails。来自 game.models 的相关代码在这里:
class Game(models.Model):
title = models.CharField(max_length=60)
create_date = models.DateTimeField(auto_now_add=True)
started = models.BooleanField(default=False)
players = models.ManyToManyField('user.UserDetails', default=None)
在首页,我想要一个表格,列出所有正在进行的游戏。在views.py中,我使用了这个命令:
games_in_signup = Game.objects.filter(started=False)
...并将其传递给模板。最后,在模板中我有这个代码来生成表的行:
{% for g in games_in_signup %}
<tr>
<td>{{ g.title }}</td>
<td>{{ g.players|first }}</td>
<td>{{ g.number_of_players }}</td>
<td>{{ g.players.all|length }}</td>
<td>{{ g.create_date }}</td>
</tr>
{% endfor %}
我没有像我希望的那样给我第一个玩家的用户名,而是得到"TypeError at /game/ 'ManyRelatedManager' object does not support indexing"。如果我尝试改变
<td>{{ g.players|first }}</td>
...至...
<td>{{ g.players.all|first }}</td>
...我得到"AttributeError at /game/ 'UserDetails' object has no attribute 'username'"。
游戏在我的设置下运行良好,但这让我很适应。可能有比这更好的设置方法,我欢迎在这方面提供任何建议。无论如何,您知道如何获取模板以将用户名第一个玩家从每个游戏的玩家列表中拉出吗?谢谢!