Я искал сайт и не могу найти ответ.То же самое для документов Django.Проблема в том, что я не могу сохранить несколько экземпляров одной формы.Я пытаюсь, чтобы пользователь настроил еженедельный календарь для спортивного клуба.Они попадают на страницу с флажками каждого дня, когда они занимаются.Так что, если они нажимают понедельник, вторник, среда.Созданы три экземпляра модели DAY.Что отлично работает.
Затем, на следующей странице.Исходя из количества дней, которые они выбрали, я хотел бы использовать PeriodsForm (для этого примера, скажем, у них есть один период в день).Затем они могут установить, в какое время каждый день начинается и заканчивается.
Я просто не могу сохранить данные.Я надеялся, что кто-то сталкивался с этим раньше.
Большое спасибо.
Я пытался использовать modelformset_factory (), но он слишком жесткий.Я также попробовал префиксы, но я не могу перебрать формы на POST.
### views.py
def create_timetable_days(request):
club = request.user.club
form = TimetableCreateForm(request.POST or None)
if len(list(Day.objects.filter(club=club))) > 0:
return redirect('/timetables/create_timetable_times')
if form.is_valid():
for item in form['Days']:
if item.data['selected']:
day = Day(name=item.data['label'], club=club)
day.save()
return redirect('/timetables/create_timetable_times')
context = {
'form': form,
}
return render(request, 'timetables/create_timetable_days.html', context)
@login_required(login_url='/login/')
def create_timetable_times(request):
club = request.user.club
days = Day.objects.filter(club=club)
#### Lost a bit around here
form = PeriodCreateForm(request.POST or None)
if form.is_valid():
for k in form:
start_time = k.cleaned_data['start_time']
end_time = k.cleaned_data['end_time']
period = Periods(start_time=start_time, end_time=end_time)
period.save()
return redirect('/')
context = {
'forms': forms,
'days': days,
}
return render(request, 'timetables/create_timetable_times.html', context)
### models.py
class Day(models.Model):
club = models.ForeignKey(Club, verbose_name=Club, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=200)
class Periods(models.Model):
day = models.ForeignKey(Day, verbose_name=Day, on_delete=models.CASCADE, null=True)
start_time = models.CharField(max_length=200, null=True)
end_time = models.CharField(max_length=200, null=True)
#### timetable.py
DAYS = (
(1, "Monday"),
(2, "Tuesday"),
(3, "Wednesday"),
(4, "Thursday"),
(5, "Friday"),
(6, "Saturday"),
(7, "Sunday"),
)
HOURS = (('00', '00'), ('05', '05'), ('10', '10'), ('15', '15'), ('20', '20'))
class TimetableCreateForm(forms.ModelForm):
Days = forms.MultipleChoiceField(choices=DAYS, widget=forms.CheckboxSelectMultiple())
class Meta:
model = Day
fields = ['Days']
class PeriodCreateForm(forms.ModelForm):
start_time = forms.ChoiceField(required=False,
choices=HOURS, )
end_time = forms.ChoiceField(
required=False,
choices=HOURS,
)
class Meta:
model = Periods
fields = ['start_time', 'end_time']