繁体   English   中英

ImageField 未在 Django 中上传

[英]ImageField is not uploaded in Django

我正在努力使用 Django 上传图像。 这是我的 model,其中我有图像字段:

class User(AbstractBaseUser, PermissionsMixin):
    USERNAME_FIELD = 'email'  
        ...
    photo = models.ImageField(upload_to="images/", default=None, blank=True, null=True)
  

我已经阅读了有关堆栈溢出的另一篇文章,我发现在settings.py我必须定义MEDIA_ROOTMEDIA_URL 这是我的文件中的内容:

MEDIA_URL = '/images/'
MEDIA_ROOT = '/home/anamaria/workspace/AllFest2/festivals/user/images/'

现在,在 url.py 我需要定义我的 urlpatterns:

urlpatterns = [
   .
   .
   .

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我相信没有给出正确的道路。 但我不知道为什么。 我该怎么做?(用户文件夹位于“AllFest2/festival”中,这是我项目的根目录。

 user
    ├── admin.py
    ├── api
    │   ├── __init__.py
    │   ├── permissions.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-36.pyc
    │   │   ├── permissions.cpython-36.pyc
    │   │   ├── serializers.cpython-36.pyc
    │   │   └── views.cpython-36.pyc
    │   ├── serializers.py
    │   └── views.py
    ├── images
    ├── __init__.py
    ├── manager.py
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── __init__.py
    │   └── __pycache__
    │       ├── 0001_initial.cpython-36.pyc
    │       └── __init__.cpython-36.pyc
    ├── models.py
    ├── OCR.py

我假设您还在设置中定义了一个基本 DIR,这会导致错误的MEDIA_ROOT

设置.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

请注意,将媒体文件存储在自己的目录media中是常见的做法,这将导致以下配置:

设置.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

网址.py

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

user也是应用程序还是您的项目目录? 我猜是一个应用程序,因为它不包含settings.py 不要在应用程序级别存储 static 和媒体文件,这是不好的做法。

我认为您应该以模板形式添加 enctype

<form action="action_url" method="post" enctype="multipart/form-data"

并且同时让你必须按照下面在views.py中提到的那样做

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM