Я пытаюсь реализовать функцию загрузки файла из внешнего интерфейса и сохранения в моем бэкэнде Django.Но я застрял, когда пытался извлечь свой файл из моего бэкэнда, он буквально просто возвращал путь к файлу, который я сохранил, но я не могу получить его, используя этот путь или используя HTTP.GET с этим URL.
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, файл будет находиться в папке мультимедиа.
Однако, похоже, потому что в моей базе данных 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, чтобы получать эти файлы, когда я возвращаю всех существующих пользователей?
Могу ли я отослать весь объект обратно с некоторыми из них как строковое поле, в то время как другие являются файлами?
Каким будет выход?