Django форма с несколькими входами из цикла сохраняет только последнюю запись в базу данных

У меня проблема с сохранением данных из формы в django. Сохраняется только последняя запись. Я формирую список дат (дни месяца) в представлении и отображаю его в форме в шаблонах вместе с полями рядом с типом. В шаблонах все отображается правильно, но когда я отправляю на, в представлении для сохранения появляется только последняя запись из формы. Что я делаю не так, кто-нибудь может помочь?

forms.py

class DoctorsSchedule(forms.ModelForm):
    # work_hours = models.CharField(max_length=50, blank=True, null=True, default='8:00-21:00')
    # official_hours = models.CharField(max_length=50, blank=True, null=True, default='8:00-19:00')
    class Meta:
        model = DoctorSchedule

        fields = ['date', 'day_type', 'work_hours', 'scheme', 'official_hours']

model.py

class DoctorSchedule(models.Model):
    id = models.AutoField(primary_key=True, unique=True)
    date = models.DateField(blank=True, null=True)
    day_type = models.CharField(max_length=255, blank=True, null=True, default='Pracujący')
    work_hours = models.CharField(max_length=50, blank=True, null=True, default='8:00-21:00')
    scheme = models.CharField(max_length=255, blank=True, null=True, default='20')
    official_hours = models.CharField(max_length=50, blank=True, null=True, default='8:00-19:00')

    def __str__(self):
        return self.date

view.py

def terminarz(request):

    today = datetime.now()
    now = date.today()
    locale.setlocale(locale.LC_TIME, 'pl_PL')

    def months():

        months = {'1': 'Styczeń', '2': 'Luty', '3': 'Marzec', '4': 'Kwiecień', '5': 'Maj', '6': 'Czerwiec',
                  '7': 'Lipiec',
                  '8': 'Sierpień', '9': 'Wrzesień', '10': 'Październik', '11': 'Listopad', '12': 'Grudzień'}
        return months

    ##################### days of month list ######################################
    def days_of_month_list():
        if request.GET.get('year') and request.GET.get('month'):

            y = int(request.GET.get('year'))
            m = int(request.GET.get('month'))
            btn_y = int(request.GET.get('year'))

        else:

            y = today.year
            m = today.month
            btn_y = today.year

        date_list = {}
        for d in range(1, monthrange(y, m)[1] + 1):
            x = '{:04d}-{:02d}-{:02d}'.format(y, m, d)
            dayName = datetime.strptime(x, '%Y-%m-%d').weekday()
            date_list[x] = calendar.day_name[dayName].capitalize()

        ################### end days of month list #################################

        return date_list

    months = months()
    date_list = days_of_month_list()

    btn_today = today.year
    btn_today_1 = today.year + 1
    btn_today_2 = today.year + 2

    if request.GET.get('year') and request.GET.get('month'):
        btn_y = int(request.GET.get('year'))

    else:
        btn_y = today.year

    if request.method == 'POST':
        form = DoctorsSchedule(request.POST)
        if form.is_valid():
              
              form.save()

        else:
            print(form.is_valid())  # form contains data and errors
            print(form.errors)
            form = DoctorsSchedule()
    else:
        form = DoctorsSchedule

    context = {
        'today': today,
        'now': now,
        'months': months,
        'date_list': date_list,
        'btn_today': btn_today,
        'btn_today_1': btn_today_1,
        'btn_today_2': btn_today_2
    }
    return render(request, "vita/panel/terminarz.html", context)

templates.html

Похоже, вы не передаете форму в контекст шаблона

context = {
    'today': today,
    'now': now,
    'months': months,
    'date_list': date_list,
    'btn_today': btn_today,
    'btn_today_1': btn_today_1,
    'btn_today_2': btn_today_2
}

попытайтесь добавить 'form': form, к контексту

context = {
    'form': form,
    'today': today,
    'now': now,
    'months': months,
    'date_list': date_list,
    'btn_today': btn_today,
    'btn_today_1': btn_today_1,
    'btn_today_2': btn_today_2
}
``` try to add `'form': form, ` to the context it may solve the issue

Обновление:

Я печатаю(request.POST) и вот результат. Когда я использую form.is_valid, он не показывает ошибок и form.save() сохраняет только последнюю запись из QueryDict

<QueryDict: {'csrfmiddlewaretoken': ['mzIuVQEY1a6s15UEInWD5xZOm6HapMyOAikLItkMTvIGOizxIU9NErfh4SUkfiR9'], 'data': ['2022-12-01', '2022-12-02', '2022-12-03', '2022-12-04', '2022-12-05', '2022-12-06', '2022-12-07', '2022-12-08', '2022
-12-09', '2022-12-10', '2022-12-11', '2022-12-12', '2022-12-13', '2022-12-14', '2022-12-15', '2022-12-16', '2022-12-17', '2022-12-18', '2022-12-19', '2022-12-20', '2022-12-21', '2022-12-22', '2022-12-23', '2022-12-24', '2022-12-25',
 '2022-12-26', '2022-12-27', '2022-12-28', '2022-12-29', '2022-12-30', '2022-12-31'], 'day_type': ['Pracujący', 'Pracujący', 'Wolny', 'Wolny', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Wolny', 'Wolny', 'Pracu
jący', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Wolny', 'Wolny', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Wolny', 'Wolny', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Pracujący', 'Wolny'
], 'official_hours_start': ['08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19
:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00', '08:00-19:00'], 'work_hours_start': ['08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21
:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00', '08:00-21:00'], 'scheme': ['30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30'], 'update_schedule': ['Uaktualnij terminarz']}>

Это решило мою проблему


        if request.method == "POST":
            if form.is_valid():
                  x1 = request.POST #get data from request and getlist from QueryDict
                  data_l = x1.getlist('data')
                  day_type_l = x1.getlist('day_type')
                  work_hours_l = x1.getlist('work_hours_start')
                  scheme_l = x1.getlist('scheme')
                  official_hours_l = x1.getlist('official_hours_start')

                  for date, day_type, work_hours, official_hours, scheme in zip(data_l,day_type_l,work_hours_l,official_hours_l,scheme_l):

                      post_dict = {'date': date, 'day_type': day_type, 'work_hours': work_hours, 'official_hours': official_hours, 'scheme': scheme}
                      
                      form = DoctorsScheduleForm(post_dict)
                      form.save()

            else:
                form = DoctorsScheduleForm()
Вернуться на верх