在 Django 中保存文件的路径不正确

Incorrect path to save the file in Django

我现在从我的前端获取文件并且我这样设置我的模型。

model.py

class User(models.Model):
    name = models.CharField(max_length=50)
    image= models.FileField(upload_to='image/', default=None)
    intro= models.FileField(upload_to='info/', default=None)

view.py

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = LsRequestSerializer
    queryset = User.objects.all()
    http_method_names = ['post']

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
         model = User
         field = '__all__'

     def create(self, validated_data):
         newUser = User.objects.create(
             name = validated_data['name']
             image = validated_date['image']
             intro = validated_date['intro']
         )
         return newUser

但是,当我在 Postman 中执行 HTTP.POST 时,它给出了错误的图像保存路径。

"http://localhost:8000/media/Koala.jpg"

但是根据我在 path_to 模型中的设计,它应该给出:

"http://localhost:8000/media/image/Koala.jpg"

更新: 奇怪的是,当我尝试通过使用 HTTP.Patch 方法提供新图像来更新用户时,它就有了正确的路径。

更新: 结果是我不能有多个输入文件字段和 upload_to 个不同的子文件夹的问题。如何解决这个问题呢? 如果我像上面那样放置序列化器,它可以找到正确的路径,但这也意味着这两个字段是必需的。但实际上,这两个字段是可选的。 但是如果我将 if 语句放在 create 函数之外,它就无法检测到正确的路径。 class UserSerializer(serializers.ModelSerializer): class 元: 模型 = 用户 field = 'all'

     def create(self, validated_data):
         newUser = User.objects.create(
             name = validated_data['name']
             image = None
             intro = None
         )
         if validate_data['image']:
            newUser.image = validate_data['image']
         if validate_data['intro']:
            newUser.image = validate_data['intro']
         return newUser

我的代码有什么问题?

那么你应该首先检查你是否在 setting.py 中指定了正确的媒体路径,它应该是这样的:

你要存放这些图片的地方:

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

如果你想像 "http://localhost:8000/media/whatever/whatever.jpg" 那样看到它们,你应该像这样指定 MEDIA_URL

MEDIA_URL = '/media/'

然后正如您在模型中所做的那样,参数将如下所示:

upload_to='image/'

您还可以阅读更多相关内容 here!

另外,如果你想处理图片,那么你可以使用 ImageField 而不是 FileField