如何在Django 2.0中上传图片

时间:2018-11-04 16:21:48

标签: python-3.7 django-2.0 django-uploads

我知道关于这个问题存在很多话题,但是我仍然没有找到解决方案。希望你能理解我! 我正在从模式形式上传图片。问题是,当我尝试上传图片时,图片返回了

django.utils.datastructures.MultiValueDictKeyError: 'imagen'

尝试找到一个解决方案,我尝试打印填写的表单,然后按下continue按钮将其保存,这是控制台中的输出:

<tr>
<th>
<label for="id_monto_boleta">Monto boleta:</label>
</th>
<td>
<input type="number" name="monto_boleta" value="900" required id="id_monto_boleta" />
</td>
</tr>

<tr>
<th>
<label for="id_imagen">Imagen:</label>
</th>
<td>
<ul class="errorlist">
<li>Este campo es obligatorio.</li>
</ul>
<input type="file" name="imagen" required id="id_imagen" />
</td>
</tr>

它没有价值...

views.py

def agregar_boleta_honorario(request):
    if request.method == 'POST':
        form = FormRegistrarBoletaHonorario(request.POST, request.FILES)
        print(form)
    else:
        form = FormRegistrarBoletaHonorario()
    return save_all(request, form, 'boletas_honorarios/agregar_boleta_honorario.html')

forms.py

class FormRegistrarBoletaHonorario(forms.ModelForm):

    class Meta:
        model = Boleta_Honorario
        fields = (
            'rut_paciente',
            'rut_medico',
            'fecha_boleta',
            'monto_boleta',
            'imagen',
        )

models.py

class Boleta_Honorario(models.Model):

    rut_paciente = models.ForeignKey(Paciente, on_delete=models.CASCADE)
    rut_medico = models.ForeignKey(Medico, on_delete=models.CASCADE)
    numero_boleta_honorario = models.IntegerField(default=0)
    fecha_boleta = models.DateTimeField()
    monto_boleta = models.IntegerField(default=0)
    imagen = models.ImageField(upload_to='boletas_honorarios_adjuntos/', blank=True)

    def __str__(self):
        return str(self.id)

模板

{% load crispy_forms_tags %}
<form method="post" enctype="multipart/form-data" data-url="{% url 'boletas_honorarios:agregar_boleta_honorario' %}" id="verificar" class="create-form">
    {% csrf_token %}
    <div class="modal-header">
        <h5 class="modal-title">Registrar Boleta honorario</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        {{form|crispy}}        
      </div>
      <div class="modal-footer">
        <button type="submit" class="btn btn-primary">Agregar boleta honorario</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
      </div>
</form>

0 个答案:

没有答案