如何检查列表中多个表单的有效性?
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(通过)
对于一个个人项目,我有一个观点,重新组合了几个来源。出于特殊原因,我必须制作一个列表,在该列表中,我根据我的数据库中的数据添加了一些表格。所以我的问题是:如何检查列表中存在的那些表单的验证。
这是我的观点:
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(通过)