Как отобразить и сохранить несколько экземпляров формы Django на основе переменной суммы? - PullRequest
0 голосов
/ 20 сентября 2019

Я искал сайт и не могу найти ответ.То же самое для документов 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...