Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 表单在应上载到“静态”时将图像上载到“媒体”文件夹_Django_Django Models_Django Forms - Fatal编程技术网

Django 表单在应上载到“静态”时将图像上载到“媒体”文件夹

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

我使用EventForm让用户编辑事件模型。 在我的模型中,我指定了upload_to目录

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")