Django 如何设计我的模型?
我有个问题。我不知道如何按照Django的公平方式构建我的模型 我有3个模型:团队、平台和游戏Django 如何设计我的模型?,django,Django,我有个问题。我不知道如何按照Django的公平方式构建我的模型 我有3个模型:团队、平台和游戏 class Team(models.Model): name = models.CharField(max_length=15, null=False) tag = models.CharField(max_length=4, null=False) description = HTMLField(blank=True, null=True) logo = models
class Team(models.Model):
name = models.CharField(max_length=15, null=False)
tag = models.CharField(max_length=4, null=False)
description = HTMLField(blank=True, null=True)
logo = models.FileField(upload_to=user_directory_path, validators=[validate_file_extension], blank=True, null=True)
games = models.ManyToManyField(Games, verbose_name="Jeu")
owner = models.ForeignKey(User, verbose_name="Créateur")
date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
class Plateform(models.Model):
name = models.CharField(max_length=100, unique=True, null=False, verbose_name="Plateforme")
guid = models.CharField(max_length=100, unique=True, null=False, verbose_name="Abréviation")
date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
class Games(models.Model):
guid = models.CharField(max_length=100, unique=True, null=False, verbose_name="GUID")
title = models.CharField(max_length=100, null=False, verbose_name="Titre")
logo = models.FileField(upload_to='media/games/', validators=[validate_file_extension], blank=True, null=True, verbose_name="Logo du jeu")
date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
plateform = models.ManyToManyField(Plateform, verbose_name="Plateforme")
因此:
- 游戏拥有许多平台
- 球队打很多比赛
class Relation(models.Model):
team = models.ForeignKey(Team)
plateform = models.ForeignKey(Plateform)
game = models.ForeignKey(Games)
但据Django说,难道没有更好的办法吗
感谢您的帮助。您可以在m2m关系中使用额外字段: 您将丢失m2m查询集上的几个可用选项,但它将以适当的方式解决您的问题 您的关系模型应该如下所示:
class Relation(models.Model):
team = models.ForeignKey(Team)
game = models.ForeignKey(Games)
platforms = models.ManyToManyField(Plateform)
在您的团队中
模型通过添加:
class Team(models.Model):
name = models.CharField(max_length=15, null=False)
tag = models.CharField(max_length=4, null=False)
description = HTMLField(blank=True, null=True)
logo = models.FileField(upload_to=user_directory_path, validators=[validate_file_extension], blank=True, null=True)
games = models.ManyToManyField(Games, verbose_name="Jeu", through='Relation')
owner = models.ForeignKey(User, verbose_name="Créateur")
date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
现在,您可以了解一个团队在玩什么游戏以及他们在什么平台上玩。
示例:
team1 = Team.objects.first()
games = team1.games.all()
for game in games:
platforms = game.platforms.all()
for platform in platforms:
print(platform)
您可以通过其他方式来完成,比如为关系中的每个平台添加一个字段,等等。。。但一般来说,这是通过使用django提供的特性来实现的。
它们可能是其他的选择,甚至比我的更好,但这是一个可以考虑的选项。
祝您好运您可以在m2m关系中使用额外字段:
您将丢失m2m查询集上的几个可用选项,但它将以适当的方式解决您的问题
您的关系模型应该如下所示:
class Relation(models.Model):
team = models.ForeignKey(Team)
game = models.ForeignKey(Games)
platforms = models.ManyToManyField(Plateform)
在您的团队中
模型通过添加:
class Team(models.Model):
name = models.CharField(max_length=15, null=False)
tag = models.CharField(max_length=4, null=False)
description = HTMLField(blank=True, null=True)
logo = models.FileField(upload_to=user_directory_path, validators=[validate_file_extension], blank=True, null=True)
games = models.ManyToManyField(Games, verbose_name="Jeu", through='Relation')
owner = models.ForeignKey(User, verbose_name="Créateur")
date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
现在,您可以了解一个团队在玩什么游戏以及他们在什么平台上玩。
示例:
team1 = Team.objects.first()
games = team1.games.all()
for game in games:
platforms = game.platforms.all()
for platform in platforms:
print(platform)
您可以通过其他方式来完成,比如为关系中的每个平台添加一个字段,等等。。。但一般来说,这是通过使用django提供的特性来实现的。
它们可能是其他的选择,甚至比我的更好,但这是一个可以考虑的选项。
祝你好运,谢谢。事实上,我认为另一种可能也是最简单的方法,就是在一个平台上添加如此多的游戏时间。我认为这是最简单的方法,因为它可以解决您以后访问数据时需要更少代码的问题。此外,您不会丢失太多django功能。但这是你的选择。你的链接很有趣。如果ManyToManyField.through_fields是这种情况的解决方案,我会试试。谢谢。事实上,我认为另一种可能也是最简单的方法,就是在一个平台上添加如此多的游戏时间。我认为这是最简单的方法,因为它可以解决您以后访问数据时需要更少代码的问题。此外,您不会丢失太多django功能。但这是你的选择。你的链接很有趣。如果ManyToManyField.through_fields是这种情况的解决方案,我会试试。