1

目前我正在尝试在我的管理界面中进行多重上传。我正在使用 Luril Garmash 在他的博客中提供的代码:http://garmoncheg.blogspot.de/2011/07/django-creating-multi-upload-form.html 正在使用非常好的 jQuery 插件从多个上传文件Sebastian Tschan: http ://blueimp.github.com/jQuery-File-Upload/ 我也是。

好的,这是我的结构:

模型.py:

class Photoalbum(models.Model):
    event = models.OneToOneField(Event, help_text="Liste der Events ohne Fotoalbum")
    date = models.DateField(auto_now=True)
    facebook = models.BooleanField()

class PhotoalbumImage(models.Model):
    album = models.ForeignKey(Photoalbum, related_name='images', null=True)
    filename = models.CharField(max_length=60, blank=True, null=True, editable=False)
    image = models.FileField(upload_to=storage, editable=False)
    key_data = models.CharField(max_length=90, unique=True, blank=True, null=True, editable=False)
    upload_date = models.DateTimeField(auto_now=True)

我扩展了 Photoalbum 的 change_form.html 模板,以便在 Photoalbum 模型的添加/更改站点上显示 jQuery 多上传表单。

这是视图逻辑:

视图.py:

    def multiuploader(request):

    #getting file data for farther manipulations
    file = request.FILES[u'files[]']
    wrapped_file = UploadedFile(file)
    filename = wrapped_file.name
    file_size = wrapped_file.file.size
    log.info ('Got file: "%s"' % str(filename))

    #writing file manually into model
    #because we don't need form of any type.
    image = PhotoalbumImage()
    image.filename=str(filename)
    image.image=file
    image.key_data = image.key_generate
    image.save()
    log.info('File saving done')

    #getting thumbnail url using sorl-thumbnail
    im = get_thumbnail(image, "80x80", quality=50)
    thumb_url = im.url

    #settings imports
    try:
        file_delete_url = settings.MULTI_FILE_DELETE_URL+'/'
        file_url = settings.MULTI_IMAGE_URL+'/'+image.key_data+'/'
    except AttributeError:
        file_delete_url = 'multi_delete/'
        file_url = 'multi_image/'+image.key_data+'/'

    #generating json response array
    result = []
    result.append({"id":image.id,
                   "name":filename, 
                   "size":file_size, 
                   "url":file_url, 
                   "thumbnail_url":thumb_url,
                   "delete_url":file_delete_url+str(image.pk)+'/', 
                   "delete_type":"POST",})
    response_data = json.dumps(result)

    #checking for json data type
    #big thanks to Guy Shapiro
    if "application/json" in request.META['HTTP_ACCEPT_ENCODING']:
        mimetype = 'application/json'
    else:
        mimetype = 'text/plain'
    return HttpResponse(response_data, mimetype=mimetype)
else: #GET
    return HttpResponse('Only POST accepted')

插件上传的每个文件都会调用此方法。注意:文件上传通过单击“开始上传”将文件与相册分开保存到文件系统和数据库。

注意:我的相册添加/更改模板在顶部显示我的相册图像的多重上传器,带有“添加文件”和“开始上传”,在底部显示相册的表单字段,底部带有标准 django 管理保存按钮。抱歉,我无法提供图片,因为在我现在所在的地方,我的连接非常非常慢(太慢了)。

这就是我的问题开始的重点:文件已保存,但相册没有。我需要一种保存方法将相册的正确主键作为外键保存到每个保存的文件中。我的第一个想法是处理会话的这个问题,将所有保存的文件 ID 保存到一个列表中,并在相册的 post_save 信号中,获取这些 ID 并将正确的相册 ID 保存到这些文件中。但我认为不应访问模型中的会话。我的第二个想法是创建一个临时模型,例如 UploadedPhotos,我在其中存储所有文件 ID,并在相册的 post_save 信号上获取这些 ID。

这只是感觉不对。我认为满足我需求的最安全方法是在创建相册后上传文件(在相册模型中单击保存后)。然后相册的主键将存在,我可以将其保存到每个文件中。但我没有任何想法让这个工作。

非常感谢您提前提供的帮助。问候

4

1 回答 1

0

好的,我通过在相册模型中使用上传和保存的照片 ID 填充隐藏的表单字段来满足我的要求。该字段是一个字符字段,我将所有 id 放入其中并用“//”分隔它们并在相册的 post_save 信号上对其进行解析。

于 2012-08-17T23:35:32.390 回答