【问题标题】:How to upload multiple images for my product model in django?如何在 django 中为我的产品模型上传多个图像?
【发布时间】:2018-10-23 09:15:47
【问题描述】:

我想上传产品的多张图片,我该怎么做? Django 版本是 2.1 以及如何存储多个文件。 使用python3

我的模型

class Product(models.Model):
owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
name = models.CharField(max_length=33, blank=True)
description = models.TextField()
postdate = models.DateTimeField(auto_now_add=True, blank=False)
duration = models.IntegerField(null=True, blank=True)
image = models.FileField(upload_to=product_directory_path, blank=False, default='default.jpg')

我的观点

def addProduct(request):
if request.method == 'GET':
    if request.user.is_authenticated:
        return render(request, 'postAd.html')

if request.method == 'POST' and request.FILES.get('image'):
    if request.user.is_authenticated:
        user = User.objects.get(id=request.user.id)
        owner = UserProfile.objects.get(email=user.email)
        image = request.FILES.get('image')
        name = request.POST['name']
        description = request.POST['desc']
        pr = Product(owner=owner, name=name, image=image, description=description, category=category, price=price, ptype=ptype)
        pr.save()
        return HttpResponseRedirect(reverse('ors:dashboard')) 

【问题讨论】:

  • 创建一个具有一对多关系的新模型“图像”
  • 谢谢@sascha。用新模型解决了

标签: django python-3.x django-models django-views


【解决方案1】:

你可以在模型中试试这个:

class Product(models.Model):
  owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
  name = models.CharField(max_length=33, blank=True)
  description = models.TextField()
  postdate = models.DateTimeField(auto_now_add=True, blank=False)
  duration = models.IntegerField(null=True, blank=True)
  image = models.FileField(upload_to='/image/, blank=False, 
  default='default.jpg')

class ImageProduct(models.Model):
  Product=models.ForeignKey(Product,on_delete=models.CASCADE)
  image=models.imageField(upload_to='/image/')

参考: https://medium.com/ibisdev/upload-multiple-images-to-a-model-with-django-fd00d8551a1c

【讨论】:

    【解决方案2】:

    forms.py

    from django import forms
    
    class UploadFileForm(forms.Form):
        file_1 = forms.FileField()
        file_2 = forms.FileField()
        ....
        ....
        file_n = forms.FileField()
    

    在您的 html 文件中添加以下代码,以便从 forms.py 中获取文件属性。

     {{ form.file1 }} #for 1st file 
     {{ form.file2 }} #for 2nd file
    

    在 views.py 中添加以下代码和 无需在 GET 方法(请求)中检查用户身份验证。

    def addProduct(request):
        if request.method == 'GET':
            return render(request, 'postAd.html')
    
        if request.method == 'POST':
            form = UploadFileForm(request.POST, request.FILES)
            if form.is_valid():
                file = request.FILES['file1']
                file1 = request.FILES['file2']
    
                #convert byte code to string 
                file_str = file.read().decode("utf-8")
                file_str1 = file1.read().decode("utf-8")
            return render(request, "postAd.html")
    

    您可以浏览此项目以了解有关上传多个文件的更多详细信息。click here

    【讨论】:

    • 但是如何知道要上传的文件数量。如果您要上传的文件数量是静态的而不是动态的,我认为此解决方案有效。
    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 2018-08-10
    • 2020-07-09
    • 2015-04-21
    • 2020-07-10
    • 2011-10-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多