Как инициализировать значение внешнего ключа в форме 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})
Вернуться на верх