gpt4 book ai didi

python - 提取用户名 - 'ManyRelatedManager' 对象不支持索引

转载 作者:行者123 更新时间:2023-11-28 21:58:01 25 4
gpt4 key购买 nike

我正在创建一个允许用户玩异步游戏的网站。我正在使用 Python 2.7.5 运行 Django 1.5,并使用 Django 的 native 用户身份验证 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)

每个游戏都链接到带有 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>

...我收到“/game/'UserDetails' 对象的 AttributeError 没有属性'username'”

根据我的设置,游戏运行良好,但这让我感到不适。可能有比这更好的设置方法,我欢迎这方面的任何建议。无论如何,您知道我如何获得模板以将用户名第一个玩家从每个游戏的玩家列表中拉出吗?谢谢!

最佳答案

这里有几个问题。

首先,您不需要在 Game 和 UserDetails 之间的关系的两边使用 ManyToManyFields。 Django 会自动为您提供反向关系,就像 ForeignKeys 一样。您应该选择一侧并仅在那里定义字段。

其次,你没有显示 username 的使用位置,但我猜你已经在 UserDetails 上定义了一个 __unicode__ 方法,类似于 return self .用户名。但是,username 不是 UserDetails 上的字段,而是链接的 User 表上的字段 - 因此它应该是 self.user.username

最后,我不确定你为什么使用 players 而不是 players.all:你看它给了你一个错误,而且你有稍后在 length 调用中正确使用了 players.all。但是,请注意,这是非常低效的:您应该在那里使用 players.count

关于python - 提取用户名 - 'ManyRelatedManager' 对象不支持索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com