Django при сохранении формы для дочерней таблицы данные не сохраняются

есть модели spisok и patronaj. Patronaj связан со списком. Вот описания

class Spisok(models.Model):
    AYOL = 'AYOL'
    ERKAK = 'ERKAK'
    JINSI_CHOICES = [
        (AYOL, 'AYOL'),
        (ERKAK, 'ERKAK'),
    ]
    familiya = models.CharField(max_length=50, verbose_name='Familiya')
    ism = models.CharField(max_length=50, verbose_name='Ism')
    otasiismi = models.CharField(max_length=50, verbose_name='Otasining Ismi', blank=True, null=True)
    dataroj = models.DateField(verbose_name='Tug`ilgan sana', default=date.today)
    jinsi = models.CharField(max_length=10, choices=JINSI_CHOICES, default='ERKAK', verbose_name='Jinsi')
    adres = models.CharField(max_length=100, blank=True, null=True)
    tel = models.CharField(max_length=50, blank=True, null=True)
    diagnoz = models.CharField(max_length=100, blank=True, null=True)
    medsestra = models.ForeignKey(PatronajMedsestra, on_delete=models.SET_NULL, blank=True, null=True)
    viloyat = models.ForeignKey(Viloyat, on_delete=models.SET_NULL, blank=True, null=True)
    tumanshahar = models.ForeignKey(Tumanshahar, on_delete=models.SET_NULL, blank=True, null=True)
    polikkvp = models.ForeignKey(Polikkvp, on_delete=models.SET_NULL, blank=True, null=True)
    homilador = models.BooleanField(default=False, verbose_name='Homilador')
    regsana = models.DateField(default=date.today, verbose_name='Homiladorlik ro`yxatga olingan sana', blank=True,
                               null=True)
    hafta = models.IntegerField(verbose_name='Homiladorlik haftasi', blank=True, null=True)
    tugdi = models.DateTimeField(verbose_name='Tug`ruq sanasi', default=date.today, blank=True, null=True)
    tuqqanjoyi = models.CharField(max_length=50, verbose_name='Tug`ruq muassasasi', blank=True, null=True)
    chaqaloqinfo = models.CharField(max_length=255, verbose_name='Chaqaloq haqida ma''lumotlar', blank=True, null=True)
    chilla = models.BooleanField(default=False, verbose_name='Chilla davri')
    ilkyosh = models.BooleanField(default=False, verbose_name='Ilk yoshdagi bola')
    bir5yosh = models.BooleanField(default=False, verbose_name='1-5 yosh')
    besh18yosh = models.BooleanField(default=False, verbose_name='5-18 yosh')
    emlash = models.BooleanField(default=False, verbose_name='Emlash davri')
    surunkali = models.BooleanField(default=False, verbose_name='Surunkali kasalligi bor')
    surunkali_kasallik = models.CharField(blank=True, null=True, max_length=100, verbose_name='Surunkali kasallik nomi')
    nogiron = models.BooleanField(default=False, verbose_name='Nogironmi')
    nogironlik = models.CharField(blank=True, null=True, max_length=100, verbose_name='Nogironlik turi')
    yolgiqariya = models.BooleanField(default=False, verbose_name='Yolg`iz qariya')
    temirdaftar = models.BooleanField(default=False, verbose_name='Temir daftar')
    ayollardaftari = models.BooleanField(default=False, verbose_name='Ayollar daftari')
    yoshlardaftar = models.BooleanField(default=False, verbose_name='Yoshlar daftari')
    primech = models.CharField(max_length=255, blank=True, null=True)

    @property
    def full_name(self):
        return '%s %s' % (self.familiya, self.ism)

    def __str__(self):
        return '%s %s' % (self.familiya, self.ism)

    class Meta:
        verbose_name = 'Aholi ro`yxati'
        verbose_name_plural = 'Aholi ro`yxati'
        ordering = ['familiya']

    def get_absolute_url(self):
        return reverse('bemor_detail_view', args=[str(self.id)])

    def get_chilla_status(self):
        if (date(self.dataroj) > date.today() + timedelta(days=40)):
            self.chilla = True
        else:
            self.chilla = False

    def get_ilkyosh_status(self):
        if (date(self.dataroj) > date.today() + timedelta(days=40)) & (date(self.dataroj) < date.today() + timedelta(days=365)):
            self.ilkyosh = True
        else:
            self.ilkyosh = False

    def get_1_5yosh_status(self):
        if (date(self.dataroj) > date.today() + timedelta(days=365)) & (date(self.dataroj) < date.today() + timedelta(days=1825)):
            self.bir5yosh = True
        else:
            self.bir5yosh = False


class Patronaj(models.Model):
    spisok = models.ForeignKey(Spisok, on_delete=models.CASCADE, verbose_name="Aholi ism-familiyasi")
    sana = models.DateField(default=date.today, verbose_name='Sana')
    starttime = models.DateTimeField(default=datetime.now, verbose_name='Boshlanish vaqti')
    endtime = models.DateTimeField(default=datetime.now, verbose_name='Tugash vaqti')
    joyi = models.CharField(max_length=50, verbose_name='Patronaj joyi', default='Xonadon')
    jalobi = models.CharField(max_length=255, verbose_name='Bemor shikoyati')
    ad = models.CharField(max_length=50, verbose_name='Arterial bosim', blank=True, null=True)
    puls = models.CharField(max_length=15, verbose_name='Puls', blank=True, null=True)
    temp = models.CharField(max_length=15, verbose_name='Tana harorati', blank=True, null=True)
    vazn = models.CharField(max_length=15, verbose_name='Vazn (1 yoshgacha)', blank=True, null=True)
    rost = models.CharField(max_length=15, verbose_name='Bo`y (1 yoshgacha)', blank=True, null=True)
    muolaja = models.CharField(max_length=100, verbose_name='Muolaja', blank=True, null=True)
    savoljavob = models.CharField(max_length=100, verbose_name='Yo`riqnoma raqami')
    natija = models.CharField(max_length=250, verbose_name='Patronaj natijasi')
    qoniqish = models.IntegerField(default='5', verbose_name='Aholining qoniqish darajasi (2 dan 5 gacha)')
    primech = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return str(self.sana)

    class Meta:
        verbose_name = 'Patronaj'
        verbose_name_plural = 'Patronajlar'

тут формы

class AholiForm(ModelForm):
    class Meta:
        model = Spisok
        fields = ("familiya", "ism", "otasiismi", "dataroj", "jinsi", "adres", "tel", "diagnoz", "medsestra", )
        labels = {
            'familiya': 'Familiya',
            'ism': 'Ism',
            'otasiismi': 'Otasining ismi',
            'dataroj': 'Tug`ilgan sanasi',
            'jinsi': 'Jinsi',
            'adres': 'Manzili',
            'tel': 'Telefon',
            'diagnoz': 'Diagnozi',
            'medsestra': 'Patronaj hamshirasi'
        }

        widgets = {
            'tags': forms.CheckboxSelectMultiple(),
        }

        def __init__(self, *args, **kwargs):
            super(AholiForm, self).__init__(*args, **kwargs)
            for name, field in self.fields.items():
                field.widget.attrs.update({'class': 'input'})

        def clean(self):
            if self.dataroj >= datetime.date.today() :
                raise ValidationError({'dataroj': _('Tug`ilgan sana keljakda bo`lishi mumkinmasku!')})


class PatronajForm(ModelForm):
    class Meta:
        model = Patronaj
        fields = ['sana', 'starttime', 'endtime', 'joyi', 'jalobi', 'savoljavob', 'natija', 'qoniqish',
                  'primech']
        labels = {
            # 'spisok': 'aholi',
            'sana': 'Patronaj sanasi',
            'starttime': 'Boshlanish vaqti',
            'endtime': 'Tugash vaqti',
            'joyi': 'Patronaj joyi',
            'jalobi': 'Aholi shikoyati',
            'savoljavob': 'Yo`riqnoma raqami',
            'natija': 'Patronaj natijasi',
            'qoniqish': 'Aholining qoniqish darajsi 2 dan 5 gacha',
            'primech': 'Izoh'
        }

        def __init__(self, *args, **kwargs):
            super(PatronajForm, self).__init__(*args, **kwargs)
            for name, field in self.fields.items():
                field.widget.attrs.update({'class': 'input'})

тут вьюшки

@login_required()
@permission_required('patronaj.change_spisok')
def updateAholi(request, pk):
    aholi = Spisok.objects.get(id=pk)
    form = AholiForm(instance=aholi)
    if request.method == 'POST':
        form = AholiForm(request.POST, instance=aholi)
        if form.is_valid():
            form.save()
            return redirect('aholi')
    context = {'form': form}
    return render(request, 'patronaj/aholi_form.html', context)


class BemorView(LoginRequiredMixin, DetailView):
    login_url = '/login/'
    redirect_field_name = 'next'
    permission_required = 'patronaj.change_spisok'
    model = Spisok
    template_name = 'patronaj/bemor.html'

    def get(self, request, pk):
        try:
            bemor = Spisok.objects.get(pk=pk)
        except Spisok.DoesNotExist:
            raise Http404("Bemor does not exist")

        # book_id=get_object_or_404(Book, pk=pk)

        return render(
            request,
            'patronaj/bemor.html',
            context={'bemor': bemor, }
        )


@login_required()
@permission_required('patronaj.change_spisok')
def createPatronaj(request, pk):
    aholi = Spisok.objects.get(id=pk)
    form = PatronajForm(initial={'spisok': aholi})
    if request.method == 'POST':
        form = PatronajForm(request.POST, instance=aholi)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.spisok = aholi
            instance.save()
            return redirect('aholi')
    context = {'form': form}
    return render(request, 'patronaj/patronaj_form.html', context)

urls

    path('update-aholi/<str:pk>', updateAholi, name="update-aholi"),   
    path('aholi/add-patronaj/<str:pk>', createPatronaj, name="add-patronaj"),

update-aholi работает, сохраняет данные.

Вопрос во втором add-patronaj. Форма отображается, сохранить нажимаю, никаких ошибок, происходит редирект, показывает общий список и все. Патронаж не добавляется.

Поле spisok я попробовал отобразить, имя фамилия правильно отображается, но ничего не сохраняет в таблице Patronaj.

Что посоветуете?

Вернуться на верх