我正在尝试实现从前端上传文件并将其保存在Django后端中的功能。但是,当我尝试从后端检索文件时,我陷入了困境,它实际上只是将路径返回给了我保存的文件,但是我无法通过使用该路径或对该URL使用HTTP.GET来获取它。
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 = None
intro = None
)
try validate_data['image']:
newUser.image = validate_data['image']
except:
newUser.image = None
try validate_data['intro']:
newUser.image = validate_data['intro']
except:
newUser.intro= None
newUser.save()
return newUser
这是原始代码,可用于成功上传文件,一旦我发出HTTP.POST请求,该文件就会存在于media文件夹下。
但是,似乎是因为在我的MySQL数据库中,它仅将文件的路径保存为字符串,因此无法打开。
因此,我尝试打开文件并保存到我的对象,然后返回,但是它给出了错误Can't convert 'FieldFile' object to str implicitly
print(MEDIA_ROOT)
print(newUser.image)
f = open(MEDIA_ROOT + newUser.image, 'rb')
newUser.image = f
return newUser
这是因为我必须将http标头中的内容类型设置为“纯文本”吗?
此外,当我返回所有现有用户时,应该如何更改view.py以获取那些文件?
我是否可以将其中的一些对象作为字符串字段发送回整个对象,而其他对象则是文件?
那么输出是什么?