Несколько различных форм в одном представлении Django
Я хотел узнать, есть ли способ иметь несколько различных форм в одном представлении и нажать одну кнопку отправки для сохранения информации. У меня есть следующие формы, первая - это общая форма, которая должна быть создана первой:
class GeneralForm(forms.ModelForm):
name = forms.CharField(max_length=50)
TYPE_CHOICES = (
("C","C"),
("E","E")
)
STATUS_CHOICES = (
("A", "A"),
("F", "F"),
)
type=forms.ChoiceField(choices=STATUS_CHOICES)
number=forms.CharField(max_length=50)
TURN_CHOICES = (
("1", "1"),
("2", "2"),
("3", "3")
)
turn = forms.ChoiceField(choices=TURN_CHOICES)
class Meta:
model = models.General
fields=["name","type","number","turn"]
Второму нужен экземпляр первого, и третьему тоже:
class TypeOneForm(forms.ModelForm):
num_chairs=forms.IntegerField()
num_instalations = forms.IntegerField()
total = forms.IntegerField()
num_programs = forms.IntegerField()
class Meta:
model = models.TypeOne
fields=["num_chairs","num_instalations","total","billetes_cien"]
class TypeTwoForm(forms.ModelForm):
num_available_seats=forms.IntegerField()
num_available_instalations = forms.IntegerField()
total = forms.IntegerField()
num_new_programs = forms.IntegerField()
class Meta:
model = models.TypeTwo
fields=["num_available_seats", "num_available_instalations","total","num_programs" ]
Я читал, что могу использовать наборы форм, но не уверен, могу ли я использовать разные формы вместо нескольких экземпляров одной формы
Вы можете использовать get_context_data()
для этого и поместить форму в контекст, но если вы хотите заполнить некоторые поля формы, вам нужно проверить форму.
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['general_form'] = GeneralForm()
return context
Валидирование таким образом
def post(self, request, *args, **kwargs):
form = GeneralForm(request.POST)
if form.is_valid():
form.instance.author = request.user
form.save()
return redirect(reverse('general_form'))