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.
Что посоветуете?