django - 如何使用 Dropzone 在 Django 中上传多个图像并动态保存路径?

标签 django django-models dropzone.js django-registration django-uploads

我正在开发一个 Django 项目,用户应该能够使用 Dropzone.js 上传图像。目前用户图像将保存在 mypp/images 文件夹下 但是我想动态保存上传图像的路径。 例如。/图像//图像1.jpg 顺便说一句,我正在使用 django-registraion-redux包(v 1.1)来处理我的用户注册和登录。 这些是我的代码:

models.py

from django.db import models
from django.contrib.auth.models import User

get_user_image_folder(instance, filename):
return "%s/%s" % (instance.user.user.username, filename)

class Picture(models.Model):
user = models.ForeignKey(User, null=True)
image = models.ImageField(upload_to=get_user_image_folder,)

foms.py

class PictureForm(forms.ModelForm):
class Meta:
    model = Picture
    fields = ('image',)

views.py

def upload_picture(request):
if request.method == 'POST':
    form = PictureForm(request.POST, request.FILES)

    if form.is_valid():
        picture = form.save()
else:
    form = PictureForm()
return render(request, "upload_picture.html", locals())

模板

  <body>
    <form action="{% url 'upload_picture' %}" class="dropzone" id="myDropzone" method='POST' enctype="multipart/form-data">
        {% csrf_token %}

        <div class="fallback">
            <input name="file" type="file" multiple />
        </div>
    </form>

    <script src="{% static 'dropzone/dropzone.js' %}"></script>
    <script type="text/javascript">
        Dropzone.options.myDropzone ={
            paramName: "image", // name of input
            autoProcessQueue : true,
            parallelUploads: 1,

            init :  function (){
                this.on( "success", function( file, responseText){
                    // event launched at the end of uploading images queued
                    console.log( responseText );
                });
            }
        };
    </script>
</body>

urls.py

urlpatterns = [url(r'^upload-picture/', 'myapp.views.upload_picture', name='upload_picture'),]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

MEDIA_ROOT = 'C:/Users/mhsha/Desktop/board'
MEDIA_URL = '/media/'

现在,当我尝试上传图像时,出现错误: /upload-picture/“图片”对象处的 AttributeError 没有属性“用户” 任何建议将不胜感激!

最佳答案

在 Models.py 中:

您有:实例.用户.用户.用户名。那里有一个额外的 .user 。应该是这样的:

def get_user_image_folder(instance, filename):
return 'images/{0}/{1}'.format(instance.user.username, filename)

class Picture(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(upload_to = get_user_image_folder)

这应该有效。

关于django - 如何使用 Dropzone 在 Django 中上传多个图像并动态保存路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558502/

相关文章:

django - auth.views.Loginview 显示 "__init__() got an unexpected keyword argument ' 请求'“

python - 更改 models.py 中属性的数据类型后,Django 迁移未应用于 Postgres

python-3.x - 抽象父模型中的 models.E006 - Django 3.1

javascript - 在 Dropzone 中上传之前的 Zip 文件

javascript - 显示删除按钮 - DropzoneJS

django - 如何使用modelform和multiwidget

python - Django 。如何编辑并保存 json 文件中的更改?

jquery - Django + jQuery : Why CSRF verification fails on multiple simultaneous requests

python - 如何获取所有行的 QuerySet,每一行都有特定的字段?

javascript - 将 dropzone.js 与 fancybox.js 相结合以提供上传照片的全屏 View