gpt4 book ai didi

django - MEDIA_ROOT 错误 : _getfullpathname: path should be string, 字节或 os.PathLike,不是元组

转载 作者:行者123 更新时间:2023-12-02 20:07:43 24 4
gpt4 key购买 nike

我是 Django 框架的新手。当我在设置中使用 MEDIA_ROOT = os.path.join(BASE_DIR, 'media'), 命令时,当我尝试在 http://127.0.0.1:8000/admin/products/product/add/ 中上传图像时遇到以下错误(管理员模式):

_getfullpathname: 路径应该是字符串、字节或 os.PathLike,而不是元组

当我尝试时,我发现删除 MEDIA_ROOT=... 也将消除错误,并且图像将正确放置在媒体文件夹的路径上。我认为使用 MEDIA_ROOT 的原因是为了了解媒体文件到 Django 的路径,但是:

1)为什么我用的时候会报错

2)为什么我删除这条命令,一切顺利?谢谢

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static'),

错误截图是 getfullpathname: path should be string, bytes or os.PathLike, not tuple

项目/urls.py

from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
#url will be here
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的 models.py 中只有一个图像域:

from django.db import models

# Create your models here.


class Product(models.Model) :
name = models.CharField(max_length=100 , verbose_name="نام جنس",null=True,blank=True)
category = models.ForeignKey('Category',on_delete=models.CASCADE , verbose_name="دسته بندی" , null=True ,blank=True)
price = models.IntegerField(verbose_name="قیمت" ,null=True,blank=True)
property=models.ForeignKey('Property',on_delete=models.CASCADE , verbose_name="ویژگی" , null=True,blank=True)
description = models.TextField(verbose_name="توضیحات",null=True,blank=True)
image=models.ImageField(upload_to="media/productimage/")


class Property(models.Model):
color = models.CharField(max_length=40 , verbose_name="رنگ",null=True,blank=True)
made = models.CharField(max_length=40 , verbose_name="ساخت کشور" , null=True,blank=True) #made in country


class Category(models.Model):
name = models.CharField(max_length=100 , verbose_name="دسته بندی" , null=True,blank=True)

最佳答案

settings.py 中的 MEDIA_ROOTSTATIC_ROOT 变量的值都有一个尾随逗号。尾随逗号将这些变量的值从字符串转换为元组。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),  # This is a tuple
STATIC_ROOT = os.path.join(BASE_DIR, 'static'), # So is this

删除结尾的逗号应该可以解决问题。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # This is now a string
STATIC_ROOT = os.path.join(BASE_DIR, 'static') # So is this

关于django - MEDIA_ROOT 错误 : _getfullpathname: path should be string, 字节或 os.PathLike,不是元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com