我正在一个允许用户玩异步游戏的网站上创建.我正在使用Python 2.7.5运行Django 1.5,并使用Django的本机用户身份验证API.我没有创建自定义用户模型,而是将每个用户链接到自定义UserDetails类.UserDetails类的相关代码如下:
class UserDetails(models.Model):
user = models.OneToOneField(User)
join_date = models.DateTimeField(auto_now_add=True)
games = models.ManyToManyField(Game, default=None)
Run Code Online (Sandbox Code Playgroud)
每个游戏都使用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)
Run Code Online (Sandbox Code Playgroud)
在首页上,我想要一个列出正在进行的所有游戏的表格.在views.py中,我正在使用此命令:
games_in_signup = Game.objects.filter(started=False)
Run Code Online (Sandbox Code Playgroud)
...并将其传递给模板.最后,在模板中我有这个代码来生成表的行:
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
而不是像我希望的那样给我第一个玩家的用户名,我得到"TypeError at/game /'ManyRelatedManager'对象不支持索引".如果我尝试改变
<td>{{ g.players|first }}</td>
Run Code Online (Sandbox Code Playgroud)
...至...
<td>{{ g.players.all|first }}</td>
Run Code Online (Sandbox Code Playgroud)
...我在/ game /'UserDetails'对象中获得"AttributeError"没有属性'username'" …