python - 如何处理多个实例的表单集?

标签 python django formset

我正在为锦标赛经理构建一个比赛系统。我有一个“匹配”模型和“设置”模型(代码如下)。首先,我想要一个表格来重新组合与一场比赛相关的所有集合,我该怎么做?其次,如果我的模板中有多个匹配项,我该如何处理?

models.py

class Match(models.Model):
    isFinished  = models.BooleanField(default=False)
    team1Win    = models.BooleanField(default=False)
    team2Win    = models.BooleanField(default=False)
    phase       = models.ForeignKey(Phase, default=None, on_delete=models.CASCADE)
    teams       = models.ManyToManyField(Team, default=None, blank=True)

class Set(models.Model):
    timeSet     = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
    scoreTeam1  = models.IntegerField(null=True)
    scoreTeam2  = models.IntegerField(null=True)
    match       = models.ForeignKey(Match, default=None, on_delete=models.CASCADE)

models.py

class SetUpdateForm(forms.ModelForm):

    class Meta:
        model = Set
        fields = [
            'scoreTeam1',
            'scoreTeam2',
            'match',
        ]

编辑: 我创建了我的表单集等...一切都很好,但我想在提交表单集之前进行一些验证,我该怎么做?

最佳答案

您可以做的是创建一个内联表单集来映射匹配和所有相关集。

首先您需要匹配和所有相关的集合:

#I assume you have the match pk from the url
def match_formset_view(request,pk):
    match = get_object_or_404(Match, pk = pk)
    #get all the related Set
    sets = match.set_set.all()
    #create the inline formset
    MatchSetFormset = forms.inlineformset_factory(
        Match,
        Set,
        form=SetUpdateForm,
        min_num=1,
        extra=0,
        can_delete=True
    )

    #populate the formset accordingly
    formset = MatchSetFormset(request.POST or None,instance=match, queryset= sets,prefix='sets')
    #validate the formset
    if formset.is_valid():
        #do something then save
        formset.save()
    else:
        #do other things.

请注意,如果您没有先保存 Match 实例(用于创建),则无法保存表单集。

关于python - 如何处理多个实例的表单集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56215422/

相关文章:

django - 初始化一个表单集

python - 使用 django 表单验证来检查元素库存

Python - 在 Flask 中将查询结果从服务器返回到客户端

python - 在 Django 中使用 pm2

python - 在服务器上创建和维护多个 Python 脚本的最佳实践

django - 在 Django 中的表单错误消息中使用模板标签

python - 是否可以在 django 中创建表单,让您直接在数据库中更改或添加?

python - 使用 funnelweb 将现有文件夹/文件结构迁移到 Plone

以列表元素作为键并将另一个列表的元素作为值的 Python 字典?

python - Tornado 在异步操作后神秘地挂起——我该如何调试?