问题描述
我的应用程序中有一个产品模型,我创建了一个 forms.py 文件以及一个视图函数,用于在其中创建一个对象。然后我在我的模板中使用它。填写完所有字段并按提交后,页面只会重新加载,不会创建产品对象。
models.py
class Product(models.Model):
name = models.CharField(max_length=36)
price = models.PositiveIntegerField()
description = models.TextField()
quantity = models.PositiveIntegerField()
image = models.ImageField()
user = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.name
forms.py
from django import forms
from .models import *
class AddProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
views.py
def Addproduct(request):
form = AddProductForm()
if request.method == 'POST':
form = AddProductForm(request.POST,request.FILES)
if form.is_valid():
form.save()
messages.success(request,"Products Added Successfully")
return redirect('product')
context = {"form":form}
return render(request,"core/addproduct.html",context)
addproduct.html
<form method="post">
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-4 mb-0">
{{ form.name|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.price|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.quantity|as_crispy_field }}
</div>
</div>
{{ form.description|as_crispy_field }}
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.image|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.user|as_crispy_field }}
</div>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Add Product</button>
</form>
解决方法
我能够通过在表单中添加 enctype="multipart/form-data"
来解决这个问题。
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-4 mb-0">
{{ form.name|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.price|as_crispy_field }}
</div>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Add Product</button>
</form>