我无法使用Django正确上传图片字段。我使用的是松脆的表单,并且表单和页面上的所有其他元素都可以正常工作。
图像字段不会产生任何错误或保存错误。我可以通过admin很好地添加图像,但仅在我松脆的表单上才失败。
views.py
class CarCreate(generic.CreateView): model = Car slug_field = 'id' slug_url_kwarg = 'car_create' template_name = 'showroom/car_create.html' form_class = CreateCarForm success_url = None def get_context_data(self, **kwargs): data = super(CarCreate, self).get_context_data(**kwargs) if self.request.POST: data['images'] = CarImageFormSet(self.request.POST) else: data['images'] = CarImageFormSet() return data def form_valid(self, form): context = self.get_context_data() images = context['images'] with transaction.atomic(): form.instance.created_by = self.request.user self.object = form.save() if images.is_valid(): images.instance = self.object images.create() return super(CarCreate, self).form_valid(form) def get_success_url(self): # return reverse_lazy('showroom:cars', kwargs={'slug': self.object.id}) # Throws an error return reverse_lazy('showroom:cars')
forms.py
class CreateCarForm(ModelForm): class Meta: model = Car exclude = ['seller', 'id'] def __init__(self, *args, **kwargs): super(CreateCarForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = True self.helper.form_class = 'form-horizontal' self.helper.form_enctype = 'multipart/' self.helper.label_class = 'col-md-3 create-label' self.helper.field_class = 'col-md-9' self.helper.layout = Layout( Div( Field('manufacturer'), Field('car_model'), Field('model_year'), Field('transmission'), Field('mileage'), Field('description'), Field('price'), Field('drivetrain'), Field('engine_displacement'), Field('forced_induction'), Fieldset('Add Images', Formset('images')), HTML("<br>"), ButtonHolder(Submit('submit', 'Save')), ) )
formset.html
{% load crispy_forms_tags %} <table> {{ formset.management_form|crispy }} {% for form in formset.forms %} <tr class="{% cycle 'row1' 'row2' %} formset_row-{{ formset.prefix }}"> {% for field in form.visible_fields %} <td> {# Include the hidden fields in the form #} {% if forloop.first %} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {% endif %} {{ field.errors.as_ul }} {{ field }} </td> {% endfor %} </tr> {% endfor %} </table> </br> {% block scripts %} {% load static %} <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="{% static 'js/django-dynamic-formset/jquery.formset.js' %}"></script> <script type="text/javascript"> $('.formset_row-{{ formset.prefix }}').formset({ addText: 'add another', deleteText: 'remove', prefix: '{{ formset.prefix }}', }); </script> {% endblock %}
car_create.html
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="card">
<div class="card-header">
<h2>Submit a car</h2>
</div>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="card-body">
{% crispy form %}
</div>
</form>
</div>
</div>
{% endblock content %}
我无法使用Django正确上传图片字段。我使用的是松脆的表单,并且表单和页面上的所有其他元素都可以正常工作。图片字段不会产生任何错误...
因为它是图像/文件字段,所以还需要像这样执行request.FILES