Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中为我的产品模型上载多个图像?_Django_Python 3.x_Django Models_Django Views - Fatal编程技术网

如何在django中为我的产品模型上载多个图像?

如何在django中为我的产品模型上载多个图像?,django,python-3.x,django-models,django-views,Django,Python 3.x,Django Models,Django Views,我想上传产品的多张图片,那么我该怎么做呢?Django版本是2.1,它还介绍了如何存储多个文件。 使用蟒蛇3 我的模型 class Product(models.Model): owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE) name = models.CharField(max_length=33, blank=True) description = models.TextField() postdate = m

我想上传产品的多张图片,那么我该怎么做呢?Django版本是2.1,它还介绍了如何存储多个文件。 使用蟒蛇3

我的模型

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')) 
forms.py

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

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


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

您可以在以下型号中尝试此功能:

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/')
参考:

创建一个具有一对多关系的新模型“Images”,谢谢@sascha。通过使用新模型解决了此问题,但如何知道将上载的文件数。我认为如果你认为上传的文件数量是静态的,而不是动态的,那么这个解决方案是有效的。
 {{ form.file1 }} #for 1st file 
 {{ form.file2 }} #for 2nd file
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")
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/')