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