我试图使用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
获取了事件的request
和id
,但我似乎无法将其传递给上传视图。
任何帮助都将不胜感激。
答案 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可能吗?