Как инициализировать значение внешнего ключа в форме Django
Я пытаюсь инициализировать модель формы, где оба поля являются внешними ключами.
Модель:
class Subcohort(models.Model):
cohort_id=models.ForeignKey(Cohort,on_delete=models.PROTECT,default=0,db_constraint=False,related_name='subcohortid')
parent_id=models.ForeignKey(Cohort,on_delete=models.PROTECT,default=0,db_constraint=False,related_name='subparentid')
Форма:
класс SubcohortForm(forms.ModelForm):
class Meta:
model = Subcohort
fields = [
"cohort_id","parent_id",
]
Просмотров:
cohortidnew = Cohort.objects.latest('id').id
initialvalue2={
'cohort_id':int(cohortidnew),
'parent_id':id,
}
form2 = SubcohortForm(initialvalue2)
if form2.is_valid():
return redirect('/dashboard')
Выдает, что моя форма не действительна. Может ли кто-нибудь объяснить, в чем причина этого и как это исправить? Спасибо.
Потому что вы не сохранили форму после валидации.
давайте сохраним его:
if form2.is_valid():
form2.save()
return redirect('/dashboard')
И теперь ваша проблема будет решена...
Если вам нужно, чтобы форма инициализировалась с этими значениями, то передайте значения с помощью параметра initial
при инициализации объекта формы:
initialvalue2={
'cohort_id':int(cohortidnew),
'parent_id':id,
}
form2 = SubcohortForm(initial = initialvalue2)
Вы можете отправить этот экземпляр form2
в шаблон напрямую, не проверяя его валидность. Но вы должны проверить, является ли форма валидной при пост-запросе. Например:
if request.method == 'GET':
form2 = SubcohortForm(initial = initialvalue2)
return render(request, template_name, context={'form2':form2})
else:
form = SubcohortForm(request.POST)
if form.is_valid():
form.save()
return redirect('dashboard')
else:
return render(request, template_name, context={'form2':form})