Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实施一个模型,用于;团队“;在django_Python_Django_Django Models - Fatal编程技术网

Python 实施一个模型,用于;团队“;在django

Python 实施一个模型,用于;团队“;在django,python,django,django-models,Python,Django,Django Models,我想在django 1.8中实现一个团队特性。(与运动队一样的团队) 每个用户一次可以加入一个团队,因此一个团队可以容纳多个用户。现在我不确定如何定义我的models.py 我从这个核心开始,但现在我不确定如何建立TeamUser的连接 我现在是创建第二类用户团队还是将团队作为外键添加到用户中?(如果是这样的话,我需要在哪里做呢?) 谢谢 维吉 //编辑:我在底部添加了一些代码。此玩家模型是否足以定义关系?正如@aumo建议的那样,我通过添加如下用户配置文件模型解决了此问题: from djan

我想在django 1.8中实现一个团队特性。(与运动队一样的团队)

每个用户一次可以加入一个团队,因此一个团队可以容纳多个用户。现在我不确定如何定义我的models.py

我从这个核心开始,但现在我不确定如何建立TeamUser的连接

我现在是创建第二类用户团队还是将团队作为外键添加到用户中?(如果是这样的话,我需要在哪里做呢?)

谢谢

维吉


//编辑:我在底部添加了一些代码。此玩家模型是否足以定义关系?

正如@aumo建议的那样,我通过添加如下用户配置文件模型解决了此问题:

from django.contrib.auth.models import User

class Player(models.Model):
    user = models.OneToOneField(User)
    team = models.ForeignKey('Team')
我选择这个解决方案,而不是在teams类中添加团队作为多个字段,因为我不确定在开发过程中是否需要向播放器添加更多字段


感谢大家的帮助。

对于这个用例,我仍然建议使用一个带有中间模型和模型管理器的
ManyToMany
字段

快速示例结构如下所示:

from django.db import models
from django.contrib.auth.models import User


class Team(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.TextField(max_length=1024)
    logo = models.ImageField()
    players = models.ManyToManyField(User, through='Player')


class PlayerManager(models.Manager):
    use_for_related_fields = True

    def add_player(self, user, team):
        # ... your code here ...

    def remove_player(self, user, team):
        # ... your code here ...

    def trasnfer_player(self, user, team):
        # ... your code here ...


class Player(models.Model):
    user = models.ForeignKey(User)
    team = models.ForeignKey(Team)
    other_fields = #...

    objects = PlayerManager()
用法:

Player.objects.add_player(user, team, *other_fields)
然后,您将能够获得
用户
相关的
团队
,例如:

team_with_user = Team.objects.filter(players__name="hello")
user_in_team = User.objects.filter(team__name="world")
注意:我还没有测试代码,如果我犯了上述任何错误,请纠正我


我喜欢这种方式的原因是将数据库逻辑抽象到应用程序中。因此,如果将来需要允许
用户加入多个团队,您可以通过经理更改应用程序逻辑以允许其加入。

您试图通过
团队id=model
实现什么?是否设置了?如果您的
玩家没有额外字段,我强烈建议只保留一个
团队
模型,并将
玩家
作为其中的多个字段,参考
用户
@WeGi,您可以在
团队
中实现一个
团队管理器
,并添加任何方法,如
添加玩家()
,并将所有逻辑/检查放在其中。WeGi,是的,应该可以@Anzel,确实如此,但对额外字段的需求可能会在以后出现,并且使用
ForeignKey
可以在数据库级别强制实现关系的唯一性,这将简化代码,减少出错的几率。@WeGi,很高兴您喜欢这样。是的,我喜欢以更灵活的方式构建我的应用程序,并尝试使用应用程序层来实现关系。因此,为了避免将来可能出现的迁移地狱,相信我,您的数据库管理员(如果有)会喜欢您作为一名开发人员。
team_with_user = Team.objects.filter(players__name="hello")
user_in_team = User.objects.filter(team__name="world")