【问题标题】:How do i upload multiple image file into single models using Django rest framework?如何使用 Django rest 框架将多个图像文件上传到单个模型中?
【发布时间】:2022-11-26 19:44:38
【问题描述】:

在创建医生模型期间,我无法上传多个图像文件。 我认为要实现多次上传,您需要在 DoctorSerializer 中设置用于上传的附加字段。

我想使用 django rest 框架为每个学生上传多张图片。目前,我只能为每个学生上传一张图片,但我希望能够为每个医生上传多张图片到他们名字目录中的上传文件夹中。我正在构建面部考勤识别系统,我需要每个学生的多张图像。这是我的 models.py 文件。

模型.py

class Doctor(models.Model):

def get_upload_path(instance, filename):
    return 'documents/{0}/{1}'.format(instance.name, filename)

mobile_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Up to 15 digits allowed.")
name = models.CharField(max_length=255, blank=False, null=False)
mobile = models.CharField(validators=[mobile_regex], max_length=15)
email = models.EmailField(max_length=255, blank=False, null=False)
picture = models.ImageField(upload_to="images/", blank=True, null=True)
document = models.FileField(upload_to=get_upload_path, null=True, blank=True)

这是我的 serializers.py

class DoctorSerializer(serializers.ModelSerializer):
class Meta:
    model = Doctor
    fields = ['id','name','email','mobile' ,'document',]
    
def create(self, validated_data):
    return Doctor.objects.create(**validated_data)

和我的 views.py 文件...

class CreateDoctorAPIView(APIView):
parser_classes = (MultiPartParser, )
def post(self,request,*args):
    try:
        files = request.FILES['document']
        print(files)
        serializer = DoctorSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({
                'message': 'Doctor created successfully',
            })
        else:
            return Response({
                'message':'something wrong'
            })
    except Exception as e:
        return Response({
            'mesaage':str(e)
        })

【问题讨论】:

    标签: django django-models django-rest-framework django-file-upload


    【解决方案1】:

    您可以通过仅为图像创建一个单独的表并在它们之间创建 ManyToMany 关系来做到这一点

    
    class DoctorImage(models.Model):
        def get_upload_path(instance, filename):
            return 'documents/{0}/{1}'.format(instance.name, filename)
        
        picture = models.ImageField(upload_to="images/", blank=True, null=True)
    
    
    class Doctor(models.Model):
    
        mobile_regex = RegexValidator(regex=r'^+?1?d{9,15}$', message="Up to 15 digits allowed.")
        name = models.CharField(max_length=255, blank=False, null=False)
        mobile = models.CharField(validators=[mobile_regex], max_length=15)
        email = models.EmailField(max_length=255, blank=False, null=False)
        doctor_images = models.ManyToManyField(DoctorImage)
        document = models.FileField(upload_to=get_upload_path, null=True, blank=True)
    

    在你的 serializers.py

    class DoctorSerializer(serializers.ModelSerializer):
        class Meta:
            model = Doctor
            fields = ['id','name','email','mobile' ,'document',]
        
        def create(self, validated_data):
            # assuming you're sending images in a list
            images = validated_data.pop('images') # this is your key name that you'll send in request
            doctor = Doctor.objects.create(**validated_data)
            doctor.docter_images.add(*images) # pass images list at once
            return doctor
    

    【讨论】:

    • “图像”不是从邮递员提交的定义
    • @GautamAnkul 没听懂。这是一个错误吗?
    【解决方案2】:

    我有同样的问题,你解决了吗?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2021-07-30
    • 2016-05-30
    • 2022-10-13
    相关资源
    最近更新 更多