如何检查列表中多个表单的有效性?

How do I check the validation of several forms in a list?

对于一个个人项目,我有一个观点,重新组合了几个来源。出于特殊原因,我必须制作一个列表,在该列表中,我根据我的数据库中的数据添加了一些表格。所以我的问题是:如何检查列表中存在的那些表单的验证。

这是我的观点:

def confirmation_view(request, id ,*args, **kwargs):
    tournament = Tournament.objects.get(pk=id)
    sport = tournament.sport
    rule = Rule.objects.get(tournament=tournament)
    categories = Category.objects.filter(tournament=tournament)
    form_tournament = TournamentCreationForm(request.POST or None, instance=tournament)
    form_sport      = SportEditForm(request.POST or None, instance=sport)
    form_rule       = RuleForm(request.POST or None, instance=rule)

    enum = 1
    tab_form_category = []
    for category in categories:
        form_category = CategoryForm(request.POST or None, instance=category)
        tab_form_category.insert(enum, form_category)
        enum = enum + 1

    if form_tournament.is_valid() and form_sport.is_valid() and form_rule.is_valid():
        return redirect('tournament')
    context = {
        'form_tournament': form_tournament,
        'form_sport': form_sport,
        'form_rule': form_rule,
        'tab_form_category': tab_form_category
    }
    return render(request, 'confirmation.html', context)

我说的是"tab_form_category".

我在 Python 和 Django 方面的经验不足,无法自行推导出解决方案。

编辑:

这是我的类别模型:

class Category(models.Model):
    description = models.CharField(max_length=128)
    tournament  = models.ForeignKey(Tournament, default=None, on_delete=models.CASCADE)

Forms.py

CategorySubForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ['description']

TournamentCategoryFormset = forms.inlineformset_factory(Tournament, Category, form=CategorySubForm, min_num=1, extra=0, can_delete=False)

View.py

def confirmation_view(request, id ,*args, **kwargs):
    tournament = Tournament.objects.get(pk=id)
    sport = tournament.sport
    rule = Rule.objects.get(tournament=tournament)
    form_tournament = TournamentCreationForm(request.POST or None, instance=tournament)
    form_sport      = SportEditForm(request.POST or None, instance=sport)
    form_rule       = RuleForm(request.POST or None, instance=rule)
    category_formset = TournamentCategoryFormset(request.POST or None, instance=tournament)

    if form_tournament.is_valid() and form_sport.is_valid() and form_rule.is_valid() and if category_formset.is_valid() :
        category_formset.save()
        return redirect('tournament')

    context = {
        'form_tournament': form_tournament,
        'form_sport': form_sport,
        'form_rule': form_rule,
        'tab_form_category': tab_form_category
        'categories' : category_formset
    }
    return render(request, 'confirmation.html', context)

在您的模板中:

{% for category_form in  categories%}
    {{category_form.as_p}} 

{% endfor %}
{{categories.management_form}}

编辑:

在您的情况下,您需要查看 inlineFormset:https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#inline-formsets 它旨在与相关表格一起使用(与锦标赛相关的每个类别都有一个子表格)。

如果你在锦标赛和类别之间使用多对多,你需要关联中介table(通过)