Проблемы с загрузкой изображения от пользователя без django ModelForm - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать форму без использования ModelForm. Я использую элементы ввода в HTML для цели (для загрузки имени и изображения) . Но у меня возникают проблемы с загрузкой изображений с помощью этого процесса. Имя сохраняется, но не изображение. Мой код:

models.py

class Register(models.Model):
    name = models.CharField(max_length=50, null=True)
    idCard = models.FileField(upload_to='idCard', null=True)

views.py

def index(request):
    if request.method == 'POST':
            data.name = request.POST.get('name')
            data.idCard = request.POST.get('idCard')
            data.save()
            return redirect('/')
    return render(request, 'event/index.html')

index. html

<form class="mform" id="myform" method="POST" id="myform" action="" enctype="multipart/form-data">
    {% csrf_token %}
<fieldset>  
    <legend>Registeration</legend> 
    <table cellspacing="0"><tbody>
    <tr><td>
        <label for="u_name"> Username :</label></td><td>
            <input type="text" name="name" id="u_name">
<td>
</tr>
<tr><td>
    <label for="u_img"> IDCard :</label></td><td>
        <input type='file' accept='image/*' onchange='openFile(event)' name="idCard" id="u_img">
</td></tr>

Имя сохраняется, но не изображение.

1 Ответ

1 голос
/ 27 мая 2020

Файлы хранятся в request.FILES:

def index(request):
    if request.method == 'POST':
            data.name = request.POST.get('name')
            data.idCard = <b>request.FILES.get('idCard')</b>
            data.save()
            return redirect('/')
    return render(request, 'event/index.html')

При этом я настоятельно рекомендую использовать Form (или ModelForm). Форма не просто обрабатывает сохранение объекта, она также выполняет правильную проверку, может возвращать сообщения об ошибках и удаляет много шаблонного кода. Часто с некоторыми настройками вы можете позволить форме выглядеть так, как вы хотите. Но даже если вы вручную напишете форму в шаблоне, вы все равно можете использовать форму на уровне Django для проверки и сохранения объекта.

...