首页 > 解决方案 > 如何使用文件路径从 django 视图上传文件

问题描述

我必须使用本地系统的文件路径从 django 视图上传文件。我正在使用 models.create 方法来保存文件路径。但是图像没有上传到媒体目录中。

我已经尝试了 django core.utils 中的内容和文件,但它不起作用

def createevent(request):
    file_path = os.path.join(settings.FILES_DIR) # Getting the directory with files
    f = []
    for (dirpath, dirnames, filenames) in walk(file_path):
        f.extend(filenames)
        break
    f.remove(".DS_Store")
    img = random.choice(f) # Select a random file 
    pa = os.path.abspath(img) # absolute file path
    # pa = (img,File(pa))

    response = File(pa)
    print(pa)
    loc = "School Ground"
    if request.method == 'POST': 
        get_dateof = request.POST.get('dateof')
        get_nameof = request.POST.get('nameof')
        get_descof = request.POST.get('descof')
        new_report = Event.objects.create(
            name=get_nameof,
            description=get_descof,
            location=loc,
            timeoftheevent=get_dateof,
            user=request.user,
            image= pa 
            ) #creating a db record
    return HttpResponse('')

我的模型.py

class Event(models.Model):
    name    = models.CharField(max_length=100,blank=False)
    description = models.CharField(max_length=100,blank=False)
    location = models.CharField(max_length=100,blank=False)
    timeoftheevent = models.CharField(max_length=100,blank=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    image   = models.FileField(blank=False)
    timestamp = models.DateTimeField(auto_now_add=True) 


    def __str__(self):
        return self.user.username

标签: djangodjango-models

解决方案


你可以试试这个。

#This would return a path for your saved images using path name/filename you can always tweak this
def user_directory_path(instance,filename):
    return '{0}/{1}'.format(instance.name, filename)

class Event(models.Model):
    name    = models.CharField(max_length=100,blank=False)
    description = models.CharField(max_length=100,blank=False)
    location = models.CharField(max_length=100,blank=False)
    timeoftheevent = models.CharField(max_length=100,blank=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    image   = models.FileField(upload_to = user_directory_path, blank=False)
    timestamp = models.DateTimeField(auto_now_add=True) 


    def __str__(self):
        return self.user.username

然后在您的views.py中,我假设myfile是您的html表单中文件字段的名称

if request.method == 'POST' and and request.FILES['myfile']: 
        get_dateof = request.POST.get('dateof')
        get_nameof = request.POST.get('nameof')
        get_descof = request.POST.get('descof')
        myfile = request.FILES['myfile']

        #creating a db record............
    return HttpResponse('')

如果有帮助,你可以看看这篇文章


推荐阅读