class Product(models.Model):
product_name = models.CharField(max_length=250)
product_rate = models.IntegerField()
product_date = models.DateField(auto_now_add=True)
product_image = models.ImageField(upload_to='products/')
product_rules = models.TextField()
product_category = models.ForeignKey(Category,on_delete=models.CASCADE,null=True,blank=True)
def __str__(self):
return " Name: {} | Date: {}".format(self.product_name,self.product_date)
[这是我的产品型号] 使用此模型,我可以将数据保存到数据库中。我还可以检索数据,然后将其显示到浏览器中。
但是,当我尝试从HTML表单中保存数据时,所有内容都进入了我的数据库,但是我看不到媒体文件夹中的图像。
当我从管理面板保存图像时,可以在媒体文件夹中看到该图像,但不能从HTML表单中看到该图像。
<input type="file" name="product_image" id="product_image">
这是我的“视图”功能,用于将这些数据保存到数据库中
def addproducts(request):
if request.method == "POST":
product_name= request.POST.get('product_name')
product_rate= request.POST.get('product_rate')
product_rules= request.POST.get('product_rules')
product_image = request.POST.get('product_image')
Product.objects.create(product_name = product_name, product_rate =product_rate, product_rules =product_rules, product_image =product_image)
return redirect('products')
else:
print("error")
return render(request,'products/addproducts.html')
除该图像外,它均正常工作。但是我仍然可以从ADMIN PANEL中看到图像名称。
我做错了什么? :/
答案 0 :(得分:1)
您需要手动处理文件,但我不建议您使用。 手动处理POST请求中的数据是不安全的,并且容易出错。
ModelForm
是处理此问题的理想方法。
只需创建一个ModelForm类:
class ProductForm(ModelForm):
class Meta:
model = Product
fields = ['product_name', 'product_rate', 'product_rules', 'product_image']
然后只需根据POST数据创建您的Product
:
def addproducts(request):
if request.method == "POST":
form = ProductForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('products')
else:
print("error")
return render(request,'products/addproducts.html')
form.is_valid()
还将检查发送的请求是否有效。