【问题标题】:Uploading to User Defined Folders Django上传到用户定义的文件夹 Django
【发布时间】:2016-09-18 23:52:43
【问题描述】:

我正在制作一个应用程序,用户可以在其中将文件上传到 AWS S3 存储桶。每个用户在注册时都会根据他们的userIDmedia 文件夹中获得一个文件夹我如何允许我的用户将他们的项目上传到他们的文件夹中?文件上传得很好,但上传到名为None 的文件夹。这似乎是一个简单的答案,但我似乎找不到它。 这是我的意见。py

def new(request):
    title = "Add New Project"
    if not request.user.is_authenticated():
        raise Http404
    form = ProjectForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.fileLocation = request.user.id
        instance.user = request.user
        instance.save()
        return redirect("/dashboard/")
    context = {
        "form": form,
        "title": title,
    }

这是我的models.py

from django.db import models
from django.conf import settings

# Create your models here.
class Project(models.Model):
    fileLocation = None
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
    title = models.CharField(max_length=200)
    description = models.TextField()
    sell = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True)
    image = models.FileField(upload_to=fileLocation, null=True, blank=True)
    def __str__(self):
        return self.title

这是我的 forms.py(以防万一)

from django import forms
from .models import Project
from django.contrib.auth.models import User

class ProjectForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProjectForm, self).__init__(*args, **kwargs)
        self.fields['image'].required = True

    class Meta:
        model = Project
        fields = [
            'title',
            'description',
            'image',
            'sell',
        ]

【问题讨论】:

    标签: python django amazon-web-services amazon-s3


    【解决方案1】:

    问题出在你的 models.py 中。

    添加这个:

    def fileLocation(instance, filename):
      return 'uploads/{0}/{1}'.format(instance.owner.username, os.path.basename(filename))
    

    删除这个:

    fileLocation = None
    

    您的用户文件应该进入uploads/<username>/<filename>

    正如 BobbyC 提到的,你应该使用 ImageField 而不是 FileField

    【讨论】:

      【解决方案2】:

      将请求参数发送到您的 modelForm init .. 并使用它(假设您随后可以访问 request.user)设置特定于该用户的位置字段

      【讨论】:

      • 你能不能说的更具体一点
      • 对不起,我没有说得那么详细,但是这个问题已经以几种不同的方式得到了回答。您能否检查此链接是否存在重复问题:link。此外,您可能希望直接使用 ImageField 而不是 FileField 来更好地处理图像尺寸、文件类型检查等。
      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 2019-03-17
      • 1970-01-01
      • 2015-09-08
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多