我对Python和Django都很陌生,所以如果这个问题有点简单,请原谅。
我正在编写一个小应用程序来跟踪台球比赛的得分。我不需要解释所有细节,但涉及的基本对象是:
团队有玩家 比赛是两队之间(主场和客场) Match有一系列游戏。 每场比赛都在两名球员之间(每队一名),不包括已参加比赛的球员。
我制作了以下模型:
class Team(models.Model):
team_id = models.IntegerField(unique=True, max_length=5, blank=False,validators=[validate_five_digits])
name = models.CharField(max_length=50, blank=False, null=False)
class Player(models.Model):
id = models.IntegerField(unique=True, max_length=5, blank=False,validators=[validate_five_digits])
team = models.ForeignKey(Team, blank=True, null=True)
first_name = models.CharField(max_length=50, blank=False, null=False)
last_name = models.CharField(max_length=50, blank=False, null=False)
alias_name = models.CharField(max_length=50, blank=True, null=True)
current_handicap = models.IntegerField()
class Match(models.Model):
date = models.DateField(blank=False, null=False)
location = models.CharField(max_length=255, blank=True, null=True)
table_size = models.CharField(max_length=50, blank=True, null=True)
home_team = models.ForeignKey(Team, related_name='home_team', blank=True, null=True)
away_team = models.ForeignKey(Team, related_name='away_team', blank=True, null=True)
class Game(models.Model):
match = models.ForeignKey(Match, blank=False, null=False)
match_sequence = models.IntegerField(blank=True, null=True)
player1 = models.ForeignKey(Player,related_name='player1', blank=False, null=False)
player2 = models.ForeignKey(Player,related_name='player2', blank=False, null=False)
player1_handicap = models.IntegerField(null=True, blank=True)
player2_handicap = models.IntegerField(null=True, blank=True)
我已经成功创建了Views和ModelForms来添加/编辑团队,玩家和匹配。 匹配列表显示在一个表中,每行1个匹配....现在我想放一个按钮来添加一个新游戏。
我的计划是通过按钮转到如下所示的网址来实现:
game/new/?match_id=1 (or something like that)
现在对于我感到困惑的部分.....当你去添加新游戏时,我想显示3个选择字段,并且只显示3个选择字段。 First Choice字段应显示尚未在此比赛中玩过游戏的主队的玩家 Second Choice字段应显示Away Team中尚未在比赛中玩过游戏的玩家 第三选择领域只有两个选择(主场和客场)......并且会指示哪个球员首先投篮。
然后,当用户点击提交时,需要使用查询字符串中的match_id创建一个Game()对象,该匹配的下一个序列号,以及Player1 = home或away player,基于第三选择字段。 / p>
我完全不知道应该怎么做....我应该使用form.Form还是ModelForm?
任何暗示我的建议或骨架代码?
提前感谢您对这样一个新手问题的帮助!
保
答案 0 :(得分:1)
构建Django应用程序时使用哪种类型的表单类是一个简单的问题。如果您正在修改模型,请使用ModelForm
,否则请使用Form
。
如果您需要根据其他数据限制选择或更改选择,您仍然可以使用ModelForm
覆盖表单的__init__()
使用ModelForm
将减少添加Game
实例所需的代码量,因为ModelForm
已知道如何创建或更新Game
的实例。如果您只使用Form
类,则必须自己处理。