html - ModelForm Django中的ImageField问题,request.FILES为空
问题描述
我在 django 使用 FormView 和 forms.ImageField 时遇到问题
这是我的models.py
class Product(models.Model):
[...]
image = models.ImageField(
'Imagen',
upload_to='Productos',
)
price = models.IntegerField('Precio del metro cuadrado')
content = models.ForeignKey(Content, on_delete=models.CASCADE)
objects = ProductManager()
class Meta:
verbose_name = ("Producto")
verbose_name_plural = ("Productos")
def __str__(self):
return self.product_name
表格.py
class ProductForm(forms.ModelForm):
[...]
form_type = forms.CharField(
required=False,
widget=forms.HiddenInput()
)
image = forms.ImageField()
class Meta:
model = Product
fields = (
'product_name',
'subtitle',
'price',
'description',
'image',
'form_type',
)
def clean(self):
cleaned_data = super(ProductForm, self).clean()
product_name = self.cleaned_data.get('product_name')
form_type = self.cleaned_data.get('form_type')
products = Product.objects.all()
for p in products:
if p.product_name == product_name and form_type != 'Update':
self.add_error('product_name', 'El nombre de este producto ya existe')
return self.cleaned_data
我的观点.py
class ProductCreateView(LoginRequiredMixin, FormView):
form_class = ProductForm
template_name = 'producto/product-form.html'
success_url = reverse_lazy('product_app:product-list')
login_url = reverse_lazy('usuario_app:login')
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
print(request.FILES)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
print('Entra')
response = super(ProductCreateView, self).form_valid(form)
response.delete_cookie('error')
return response
这是我的带有 enctype="multipart/form-data" 的 html
<form
action="{% if product == None %}{% url 'producto_app:product-create' %}{% else %}{% url 'producto_app:product-update' product.product_id %}{% endif %}"
id="productForm"
method="POST"
enctype="multipart/form-data"
>
<div class="modal-body">
{% csrf_token %}
<div class="form-group">
<label for="product_name">
<span class="text-danger">*</span> Nombre del producto
</label>
{{ form.product_name }} {% for error in form.product_name.errors %}
<small id="product_name_errors" class="form-text text-danger pl-2">
{{ error|escape }}
</small>
{% endfor %}
</div>
<div class="form-group">
<label for="product_name">
<span class="text-danger">*</span> Subtítulo
</label>
{{ form.subtitle }} {% for error in form.subtitle.errors %}
<small id="subtitle_errors" class="form-text text-danger pl-2">
{{ error|escape }}
</small>
{% endfor %}
</div>
<div class="form-group">
<label for="price">
<span class="text-danger">*</span> Valor m²
</label>
{{ form.price }} {% for error in form.price.errors %}
<small id="price_errors" class="form-text text-danger pl-2">
{{ error|escape }}
</small>
{% endfor %}
</div>
<div class="form-group">
<label for="description"> Descripción </label>
{{ form.description }}
</div>
{{form.image}} {% for error in form.image.errors %}
<small id="image_errors" class="form-text text-danger pl-2">
{{ error|escape }}
</small>
{% endfor %}
{{form.form_type}}
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-primary"
onclick="closeModal('#productChange', '#productForm')"
>
Actualizar
</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">
Cerrar
</button>
</div>
</form>
我正在尝试上传图像,但 request.FILES 总是打印为空,我在几个论坛上阅读,但只有 enctype 的响应,我会感谢您的帮助。
解决方案
推荐阅读
- python - 将大量字典转换为 float32 DataFrame
- spring-boot - org.hibernate.exception.DataException:无法在 Spring Boot 和 Data JPA 中执行查询
- c# - 所有路径都不返回值
- r - 使用函数中的其他列数据在 R 中创建列
- flutter - 通过 WIFI 进行颤振打印
- latex - 乳胶网址未格式化
- leaflet - leaflet draw large number of icon marker
- swift - 在我的文本附加到我的 tableView 之前,我的按钮必须被点击两次
- java - 无法使用 GrantedAuthority 字段保存对象(不存在创建者,如默认构造)
- python - 如何使用“with”语句正确初始化对象?