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

2024-04-24 23:02:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在为一个赛事经理建立一个比赛系统。我有一个“匹配”模型和“设置”模型(代码如下)。首先,我想有一个形式,重组所有集有关的一场比赛,我怎么做?其次,如果我的模板中有几个匹配项,我如何处理这个问题?你知道吗

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',
        ]

编辑: 我创建了我的表单集,等等。。。所有的工作都非常好,但我想在提交表单集之前做一些验证,我怎么做?你知道吗


Tags: py模型nonefalsetruedefaultmodelon
1条回答
网友
1楼 · 发布于 2024-04-24 23:02:00

您可以做的是创建一个inlineformset来映射匹配和所有相关的集合。你知道吗

首先,您需要匹配和所有相关设置:

#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.

请注意,如果没有先保存匹配实例(用于创建),则无法保存表单集。你知道吗

相关问题 更多 >