我现在从我的前端获取文件,并像这样设置我的模型。
模型.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)
视图.py
class UserViewSet(viewsets.ModelViewSet):
serializer_class = LsRequestSerializer
queryset = User.objects.all()
http_method_names = ['post']
序列化程序.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 函数之外,它就无法检测到正确的路径。类 UserSerializer(serializers.ModelSerializer): 类 Meta: 模型 = 用户字段 = '全部'
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
我的代码有什么问题?