从视图中返回一列中的多个字符

时间:2016-04-30 22:47:08

标签: python django

团队有一个名字。玩家属于团队,玩家也有速度和国籍。结果返回高速球员的数量,如果他们没有达到所需的速度,他们的国籍将被记录。

 models 

 team -> name 

 player -> belongsto(foreign key to team),speed, nationality

 Details -> fastspeed, nationality, team( foreign key to team)

 view.py

 speed = 5

 loop through all the players in a team
 if player.speed > 5 
    speed += 1 
 else
    player.nationality 

详细信息应返回速度超过5的玩家数量,并返回该团队中所有玩家的国籍。

     team number     fastspeed| nationalities
    ---------- --------------  --------------
        1                5        American
                                  French
                                  British
    ----------------------------------------
       2                3         German
                                  Australian

每个团队正在返回多个国籍。找出有多少快速玩家很容易,我们只使用上面定义的增量值。但是,找出一个团队中每个球员的角色的民族似乎并不那么容易。

我想定义一个列表

     nationalitylist = list[] and then doing 

     else nationality = player.nationality 

然后可以通过details = details()

返回

然后可以通过

传递给细节
 details = details() 
 details.nationality=nationalitylist 

努力寻找如何通过每支球队每个球员的国籍。我期待这很容易。

1 个答案:

答案 0 :(得分:0)

好的,我会帮助你解决这个问题。我对这个问题的理解是你希望获得一个拥有速度为5或者以下的玩家的所有国籍的列表。

首先,我们定义一个空的国籍列表,然后迭代所有玩家,检查他们的速度。如果他们的速度是5或更低,我们将他们添加到国籍列表。

nationalities = []
if player.speed > 5:
    speed +1
else:
    nationalities.append(player.nationality)

这将为我们提供一个拥有速度低于5的玩家的每个国籍的列表。但是,如果有多个同一国籍的慢速玩家,那么该国籍将在您的列表中多次出现。

如果您只想在列表中显示一次该国籍,那么我们可以使用以下命令将列表转换为集合,然后再将其转换为列表。这将删除任何重复的条目。

nationalities = list(set(nationalities))

在数据库中存储此列表取决于您使用的Django版本和数据库。

如果您使用的是PostgreSQL,则可以访问阵列字段,以便直接存储列表。 (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#arrayfield

否则,您可能需要考虑将列表转储到json,然后可以将其存储为CharField或TextField。

import json
json_nationalities = json.dumps(nationalities)