【问题标题】:Multiple image not saved to its foreign key object多个图像未保存到其外键对象
【发布时间】:2016-06-30 07:37:01
【问题描述】:

我使用前端视图库创建了一个表单,用户可以在其中上传多个图像。我可以开发它,但图像不会保存到相关的租金中。为此,我必须从管理员手动分配租金。

Models.py

class Rental(models.Model):
    name = models.CharField(_("Owner's Name"),max_length=255, blank=True,null=True)
    email = models.CharField(max_length=120,blank=True,null=True)

class GalleryImage(models.Model):
    rental = models.ForeignKey('Rental',on_delete=models.CASCADE,blank=True,null=True,
                                verbose_name=_('Rental'), related_name="gallery")
    image = models.ImageField(blank=True,upload_to='upload/',null=True)

用于图片上传的views.py

class UploadImage(View):
    model = Rental
    def post(self,request,*args,**kwargs):
        if request.FILES:
            for file in request.FILES.getlist('image'):
                print('file',file)
                # rental = request.POST.get('rental', False)
                # print('rental is', rental)
                image = GalleryImage.objects.create(image=file)
                image.save()
        return HttpResponseRedirect('/')

class AddView(TemplateView): // upload form is in add.html template
    template_name = 'rentals/add.html'

urls.py

url(r'^add/$', AddView.as_view(), name="add"),
url(r'^upload/image/$', UploadImage.as_view(), name="uploadImage"),

addrent.js(多张图片上传的ajax代码)

var image = [];
image = new FormData(files);
$.each(files,function(i,file){
  image.append('image',file);
});
$.ajax({
    url:"/upload/image/",
    data:image,
    contentType:false,
    processData:false,
    type:'POST',
    mimeType: "multipart/form-data",
    success: function(data) {
      console.log('success');
    }
});
}

我必须做些什么才能将多张图片保存到它们关联的出租实例中,比如第一张图片?

【问题讨论】:

  • 我不明白您创建对象的方式,您使用“创建”,为什么不使用所有参数实例化对象而不是简单地保存它?除此之外,出租的参数没有明确传递给服务器(据我从您发布的代码中可以看出)。可以展示一下模板吗?

标签: python django django-views django-1.9


【解决方案1】:

您需要以某种方式发送租赁对象的 ID(在 URL 路径或 URL GET 参数中)。然后在视图中您需要获取对象,并在创建 GalleryImage 对象时将其作为参数传递。

您也不需要在objects.create() 之后调用image.save()。它已经在数据库中了。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2013-05-17
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多