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)
Вернуться на верх