Отправить html-форму django

У меня есть приложение django и я пытаюсь отправить форму, но поле файла учебного материала имеет несколько вариантов выбора файла, поэтому я пытаюсь создать ключевой уровень с именем описанием статусом, после чего с помощью идентификатора ключевого уровня я сохраняю файлы в другой таблице. models.py:

class KeyLevel(models.Model):
    name = models.CharField(max_length=100, unique=True)
    description = models.TextField(null=True, blank=True)
    status = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


class KeylevelFileUpload(models.Model):
    key_level_id = models.ForeignKey(KeyLevel, related_name="keylevel", to_field="id", verbose_name=_("Key Level Id"),on_delete=models.CASCADE, null=True, blank=True, db_column="key_level_id")
    study_material = models.FileField(upload_to='study_material', null=True, blank=True)
    status = models.SmallIntegerField(verbose_name=_("Status: 1 for Active; 0:Inactive"), default=1)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    

html:

html template:

enter image description here

сначала я пытаюсь сделать вот так:

class KeyLevelForm(forms.Form):
   STATUS = (
      ('enable', "Enable"),
      ('disable', "Disable")
   ) 
   name = forms.CharField(max_length=250)
   description = forms.CharField(widget=forms.Textarea())
   status = forms.ChoiceField(choices=STATUS)


def keyAddView(request):
if request.method == 'POST':
    name = request.POST['name']
    description = request.POST['description']
    status = request.POST['status']
    print(name, description, status)
    #print("working", request.POST, request.FILES)
    form = KeyLevel(name=name, description=description, status=status)
    # print(form)
    if form.is_valid():
        form.save()
        return redirect('keyLevelList')
else:
    form = KeyLevelForm()
return render(request, 'admin/level_management/key_level/add.html', {'form': form})

но это не работает, а также как я собираюсь передать этот внешний ключ другой форме, которая имеет поле загрузки учебного материала

я попробовал с другой альтернативой:

def keyAddView(request):
if request.method == "POST":
    data = request.POST
    name = data.get('levelName', None)
    description = data.get('description')
    status = data.get('activeInactive')
    keyLevelSave = KeyLevel(
        name=name, description=description, status=status)
    study_files = request.FILES.getlist('studyMaterialbrowse')
    if keyLevelSave:
        try:
            save_data = keyLevelSave.save()
            objs = KeyLevel.objects.latest('id')
            for s_file in study_files:
                file = file_save_by_source(
                    request, settings.ACTS_FILE_UPLOAD + 'key_level_file', s_file)                 
                file_name = s_file.name
                try:
                    KeylevelFileUpload(
                        file_id=file, key_level_id=objs).save()
                except Exception as e:                       
        except Exception as e:       
        return redirect('/admin/exam/keylevel/')

return render(request, 'admin/level_management/key_level/add.html')

Это вроде работает, но проблема в том, что после keylevelsave, если файл не был сохранен, я не могу откатиться назад.

как мне сохранить эту форму правильным образом

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