我在一個允許用戶玩異步遊戲的網站上創建。我使用Python 2.7.5運行Django 1.5,並使用Django的本地用戶身份驗證API。我沒有創建一個自定義用戶模型,而是將每個用戶鏈接到一個自定義的UserDetails類。爲的UserDetails類相關的代碼是在這裏:拉一個用戶名 - 'ManyRelatedManager'對象不支持索引
class UserDetails(models.Model):
user = models.OneToOneField(User)
join_date = models.DateTimeField(auto_now_add=True)
games = models.ManyToManyField(Game, default=None)
每個遊戲環節與一個多對多領域的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 %}
而不是給我的第一個玩家的用戶名,因爲我的願望,我得到「類型錯誤在/遊戲/ 'ManyRelatedManager'對象不支持索引「。如果我試圖改變
<td>{{ g.players|first }}</td>
...到...
<td>{{ g.players.all|first }}</td>
...我得到 「AttributeError的在/遊戲/ '的UserDetails' 對象有沒有屬性 '名'」。
遊戲運行良好,我如何設置,但這一直給我適合。可能有更好的方法來設置它,而且我很樂意在這方面提供任何建議。無論如何,你知道我怎樣才能讓模板將玩家列表中的第一名玩家從每個遊戲中拉出來嗎?謝謝!
你是否在某處引用'.username'?可能在'__unicode__'? – karthikr
就是這樣 - 見Daniel的答案。謝謝! –