Как я могу проверить правильность нескольких форм в списке? - PullRequest
0 голосов
/ 24 апреля 2019

Для личного проекта у меня есть представление, которое объединяет несколько предложений. По особой причине я должен был составить список, и в этот список я добавил несколько форм в зависимости от данных в моей БД. Поэтому мой вопрос: как я могу проверить правильность тех форм, которые присутствуют в списке.

Вот мой взгляд:

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, чтобы самому найти решение.

EDIT:

Вот моя модель категории:

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

1 Ответ

0 голосов
/ 24 апреля 2019

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 Он предназначен для работы со связанной формой (у вас будет одна подчиненная форма для каждой категории, связанной с турниром).

Если вы используете многие ко многим между турниром и категорией, вам нужно связать промежуточную таблицу (через)

...