Django 表单在应上载到“静态”时将图像上载到“媒体”文件夹
我使用EventForm让用户编辑事件模型。 在我的模型中,我指定了upload_to目录Django 表单在应上载到“静态”时将图像上载到“媒体”文件夹,django,django-models,django-forms,Django,Django Models,Django Forms,我使用EventForm让用户编辑事件模型。 在我的模型中,我指定了upload_to目录 class Event(models.Model): image = models.ImageField(upload_to='event_image') 我希望链接到模型的表单将其上载到同一位置,但它已上载到媒体-我从obj.image.url获得的文件名为“media/filename”。这是我的表格: class EventForm(forms.ModelForm): image
class Event(models.Model):
image = models.ImageField(upload_to='event_image')
我希望链接到模型的表单将其上载到同一位置,但它已上载到媒体-我从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/'
所有模型的图像都上载到“媒体/事件\图像”,但修改后的图像上载到“媒体/文件名”,但该目录中不存在。解决此问题的最佳方法是什么?
谢谢。当你说下列话时,我很困惑: 我希望链接到模型的表单能够上传到 同一地点 如果使用该ImageField直接保存模型的实例,则保存的文件应位于媒体根目录中 这就是Django的文件字段在默认情况下的工作方式:它们不会将内容发送到STATIC_ROOT 静态文件明确用于站点内容,而不是用户上传的内容 您甚至不能将静态根目录和媒体根目录设置为同一个目录,因为它们有不同的用途,如果是这样,Django的设置检查器将抛出错误:
我认为更好的问题是:为什么要创建一个用于存储静态文件的模型?谢谢您的回答。这是我自己的错误。我将修改我的问题。问题是图像应该上传到“媒体/事件\图像/文件名”,但它没有上传到那里,object.image.url是“媒体/文件名”,它不存在。我不知道在那种情况下我能帮多少忙。尽管如此,仍然有一些令人困惑的地方:如果文件没有上传到media/event_image/filename,并且object.image.url==media/filename,正如您所说,这两个文件都不存在,那么这两个文件听起来都不存在。它去哪里了?它被上传了吗?
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")