Отправить 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:
сначала я пытаюсь сделать вот так:
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, если файл не был сохранен, я не могу откатиться назад.
как мне сохранить эту форму правильным образом