1

我对 Python 和 Django 都是新手,所以如果这个问题有点简单,请原谅。

我正在编写一个小应用程序来跟踪台球比赛的比分。我不需要解释所有细节,但涉及的基本对象是:

球队有球员比赛是在两支球队(主场和客场)之间比赛有一系列比赛。每场比赛在两名球员(每队一名)之间进行,不包括已经参加比赛的球员。

我制作了以下模型:

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)

我已经成功地制作了视图和模型表单来添加/编辑团队、球员和比赛。比赛列表显示在表格中,每行 1 场比赛......现在我想添加一个按钮来添加新游戏。

我的计划是让按钮转到如下所示的网址:

game/new/?match_id=1  (or something like that)

现在对于我感到困惑的部分......当你去添加一个新游戏时,我想显示 3 个选择字段,并且只有 3 个选择字段。第一选择字段应显示尚未参加本场比赛的主队球员 第二选择字段应显示尚未参加比赛的客队球员 第三选择字段将只有两个选择(主队和客队) )....并会指示哪个玩家首先射击。

然后,当用户单击提交时,它需要创建一个 Game() 对象,其中包含查询字符串中的 match_id、比赛的下一个序列号,并且 Player1 = 主客场球员,基于第三个选择字段。

我完全不知道应该怎么做……我应该使用forms.Form还是ModelForm?

有什么建议或骨架代码可以提示我吗?

提前感谢您对这样一个新手问题的帮助!

保罗

4

1 回答 1

1

构建 Django 应用程序时使用什么类型的表单类是一个简单的问题。如果您正在编辑模型,请使用 a ModelForm,否则使用 a Form

如果您需要限制选择或根据其他数据更改选择,您仍然可以ModelForm通过覆盖表单的__init__()

使用 aModelForm将减少添加实例所需的代码量Game,因为 aModelForm已经知道如何创建或更新Game. 如果你只是使用一个Form类,你必须自己处理。

于 2013-07-31T03:42:22.387 回答