2017-02-12 55 views
0

我正在使用EventForm让用户编辑事件模型。 在我的模型,我指定的upload_to目录表单将图像上传到'静态'时将图像上传到'media'文件夹

class Event(models.Model): 
    image = models.ImageField(upload_to='event_image') 

和我期待的是被链接到模型把它上传到同一个位置的形式,但它被上传到媒体 - 我得到的文件名from obj.image.url是'media/filename'。这里是我的形式:

class EventForm(forms.ModelForm): 
    image = forms.ImageField(label="Event Image", required=True) 

    class Meta: 
     model = Event 

views.py:

def edit_event(request, event_id): 
    if request.method == 'POST': 
     edited_event = Event.objects.get(id=event_id) 
     form = EventForm(request.POST, request.FILES, instance=edited_event) 

     if form.is_valid(): 
      data = form.cleaned_data 
      cat = Category.objects.get(name=data["category_str"]) 

      Event.objects.filter(id=event_id).update(name=data["name"],description=data["description"],address=data["address"], 
                volunteerLimit=data["volunteerLimit"],category=cat,minimumAge=data["minimumAge"], 
                image=data["image"], date=data['date']) 
    return render(request, 'handsup/index.html') 

这里是我的媒体和静态根设置:

STATIC_URL = '/static/' 
STATIC_DIR = os.path.join(BASE_DIR, 'static') 
STATICFILES_DIRS = [STATIC_DIR, ] 

MEDIA_DIR = os.path.join(BASE_DIR, 'media') 
MEDIA_ROOT = MEDIA_DIR 
MEDIA_URL = '/media/' 

所有模特的图片被上传到“媒体/ event_image',但修改后的图像上传为“媒体/文件名”,但不存在于该目录中。解决这个问题的最好方法是什么? 谢谢。

回答

1

我很困惑,当你说以下内容:

我期待链接到该模型把它上传到 同一位置的表格。

如果直接保存你的模型与ImageField的一个实例,然后保存该文件应该在你的MEDIA_ROOT结束。

这是Django的FileField默认工作的方式:它们不会将东西发送到STATIC_ROOT

静态文件明确用于网站内容,而不是用户上传的内容。

你甚至不能将你的STATIC_ROOTMEDIA_ROOT设置为相同的目录,因为它们服务于不同的目的,如果是的话,Django的设置检查器将会引发错误。 Here's that error in the code

if ((settings.MEDIA_ROOT and settings.STATIC_ROOT) and 
      (settings.MEDIA_ROOT == settings.STATIC_ROOT)): 
     raise ImproperlyConfigured("The MEDIA_ROOT and STATIC_ROOT " 
            "settings must have different values") 

我想一个更好的问题是:你为什么要创建要用来存储staticfiles模式?

+0

谢谢你的回答。我自己的错误在那里。我会修改我的问题。问题是应该将图像上传到'media/event_image/filename',但它没有上传,object.image.url是'media/filename',它不存在。 – matchifang

+0

啊。我不确定在这种情况下我会有多少帮助。但是仍然有一些令人困惑的地方:如果文件没有上传到'media/event_image/filename'和'object.image.url == media/filename',就像你说的“不存在”那样,它听起来像图像不在任何地方。它去了哪里?它是否上传? – erewok