【问题标题】:How to save images from HTML form in Django?如何在 Django 中保存 HTML 表单中的图像?
【发布时间】:2020-03-08 06:01:40
【问题描述】:
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')

除该图像外,它可以正常工作。但我仍然可以从管理面板中看到图像名称。

我做错了什么? :/

【问题讨论】:

    标签: django django-models django-forms django-templates


    【解决方案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() 还会检查发送的请求是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2021-07-06
      相关资源
      最近更新 更多