Django Form не сохраняет файл в базу данных
views.py
from .forms import palForm
def add_form(request):
if request.method!="POST":
return HttpResponse("Method Not Allowed")
else:
form = palForm(request.POST, request.FILES)
context = {"form": form}
if form.is_valid():
form.save()
messages.success(request,"Successfully Added")
return render(request,"home/pal-form.html",context)
else:
messages.error(request,"Failed to Add")
return render(request,"home/pal-form.html",context)
forms.py
from django import forms
from .models import palabout
class palForm(forms.ModelForm):
class Meta:
model=palabout
fields =['fname','lname','dob','gender','profileImage']
models.py
from pol.models import CustomUser
from django.db import models
class palabout(models.Model):
user = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL)
profileImage = models.FileField()
fname = models.CharField(max_length=30)
lname = models.CharField(max_length=30)
gender = models.CharField(
max_length=1, choices=(('m', ('Male')), ('f', ('Female'))),
blank=True, null=True)
dob = models.DateField(max_length=8)
.html
Я много пытаюсь сохранить мою базу данных, но это не удается, потому что много раз я получал failed to Add
, но не успешно на моих страницах на базе данных. Подскажите, пожалуйста, в чем проблема в моей странице?
Согласно вашим представлениям, вы выводите шаблон после оператора else.
Вместо этого:
else:
messages.error(request,"Failed to Add")
return render(request,"home/pal-form.html",context) #here you made mistake so that's why it is not saving.
Сделайте следующее:
else:
messages.error(request,"Failed to Add")
return render(request,"home/pal-form.html",context)
В вашем темплейте вы не передали поля формы в inputs. Давайте передадим их:
Похоже, что проблема заключается в том, что HTML-форма не имеет правильных имен полей для формы Django. В HTML-форме элементы ввода для fname, lname, gender и dob не имеют атрибутов name, поэтому, когда форма отправляется, Django не знает, какие поля формы заполнять отправленными данными.
Чтобы исправить это, вы можете добавить атрибуты имени к элементам ввода в HTML-форме, например, так:
<input type="text" id="fname" name="fname" tabindex="1" />
Вы должны сделать это для всех элементов ввода в форме, которые соответствуют полям в форме Django.
Кроме того, элемент ввода для поля profileImage не имеет атрибута name, а также отсутствует атрибут type="file", который необходим для загрузки файлов. Правильный HTML для этого поля будет выглядеть следующим образом:
<input type="file" name="profileImage" id="imageUpload" placeholder="Photo" required="" capture>
После внесения этих изменений форма должна корректно сохранять данные в базе данных.
Попробуйте использовать django для рендеринга формы, например или используйте атрибут name='same_as_field_name' для полей
<input type="text" name='fname' id="fname" tabindex="1" />
<input type="text" name='lname' id="lname" tabindex="1" />
.....
.....
или
{{form.fname}}
{{form.lname}}
....
....
для получения корректной ошибки, затем измените messages.error(request, "Failed to Add") на
messages.error(request,form.errors)