如何将django-jfu与ImageField和FK一起使用?

时间:2016-01-30 13:05:08

标签: django django-templates django-views jquery-file-upload

我试图使用django-jfu来多张图片,但我遇到了问题。我想动态处理外键(通过url或其他东西),但我无法想到任何事情。

我有以下型号:

class Event(models.Model):
    name = models.CharField(max_length=128)

class Picture(models.Model):
    event = models.ForeignKey(Event)
    image = models.ImageField(upload_to='media')

根据django-jfu的说法,你必须指定一个"上传"查看通过模板标签从模板调用。这是我的上传视图:

@require_POST
def upload(request):

    event = Event.objects.get(id=26)
    file = upload_receive(request)
    instance = Picture(image = file, event = event)
    print instance
    instance.save()

    basename = os.path.basename(instance.image.path)

    file_dict = {
        'name' : basename,
        'size' : file.size,

        'url': settings.MEDIA_URL + basename,
        'thumbnailUrl': settings.MEDIA_URL + basename,

        'deleteUrl': reverse('jfu_delete', kwargs = { 'pk': instance.pk }),
        'deleteType': 'POST',
    }

    return UploadResponse(request, file_dict)

现在,作为测试,它只将图片保存到id = 26的事件,但我该如何动态处理?这是我调用模板标记的视图和模板:

视图

def add_pictures_to_event(request, event_id):
    return render(request, 'add_pictures_to_event.html')

模板

{% extends 'base.html' %}

{% load staticfiles %}
{% load jfutags %}

{% block body %}
<div class="container">
    <h2>Photo upload</h2>

    {% jfu %}

</div>
{% endblock %}

正如您所看到的,视图add_pictures_to_event获取了事件的requestid,但我似乎无法将其传递给上传视图。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我查看了jQuery文件上传的不同django版本,但坚持使用Alem的jfu,但使用Thomas Willson的changes使其在1.9中工作。我的解决方案可能不是最好的,但我找不到另一种方式。

我假设您已经创建了一个事件,然后向其添加图像。

media_upload_form.html位于我的项目静态目录中。我使用UPLOAD_FORM_EXTRA块添加了一个隐藏的表单字段,其中包含当前的event_id:

{% block UPLOAD_FORM_EXTRA %}
        <input type="hidden" name="currentevent" value="{{instance.pk}}">
{% endblock %}

我假设你有来自文档的观点。我在uploadview的开头改变了:

file = upload_receive( request )

event_instance = get_object_or_404(Event, id=request.POST['currentevent'])
instance = Picture( file = file, event=event_instance)
instance.save()

它可能违反所有django规则,但它有效。如果有人有更好的解决方案,我也想知道。 FormSets可能吗?