我有一个要求,我希望允许在同一发布请求中上传多个文件以创建对象。我目前有一种方法可以执行此操作,但是在查看其他一些示例后,这似乎并不是想要的方法。
models.py
class Analyzer(models.Model):
name = models.CharField(max_length=100, editable=False, unique=True)
class Atomic(models.Model):
name = models.CharField(max_length=20, unique=True)
class Submission(models.Model):
class Meta:
ordering = ['-updated_at']
issued_at = models.DateTimeField(auto_now_add=True, editable=False)
completed = models.BooleanField(default=False)
analyzers = models.ManyToManyField(Analyzer, related_name='submissions')
atomic = models.ForeignKey(Atomic, verbose_name='Atomic datatype', related_name='submission', on_delete=models.CASCADE)
class BinaryFile(models.Model):
class Meta:
verbose_name = 'Binary file'
verbose_name_plural = 'Binary files'
def __str__(self):
return self.file.name
submission = models.ForeignKey(Submission, on_delete=models.CASCADE, related_name='binary_files')
file = models.FileField(upload_to='uploads/binary/')
Run Code Online (Sandbox Code Playgroud)
serializers.py
class BinaryFileSerializer(serializers.ModelSerializer):
class Meta:
model = models.BinaryFile
fields = '__all__'
class SubmissionCreateSerializer(serializers.ModelSerializer):
class Meta:
model …Run Code Online (Sandbox Code Playgroud) 我在解析视图集中的request.data时遇到问题。我有一个模型,可以根据产品添加多个图像。
我想从传入数据中分离图像,将产品数据发送到 ProductSerializer,然后将图像与产品数据一起发送到其序列化器并保存。
我有两个模型,就像这样:
def Product(models.Model):
name = models.CharField(max_length=20)
color = models.ForeignKey(Color, on_delete=models.CASCADE)
def Color(models.Model):
name = models.CharField(max_length=15)
def ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.ImageField(upload_to='product_pics/')
Run Code Online (Sandbox Code Playgroud)
我想发送到产品(127.0.0.1:8000/products/)的请求就像:
{
"name": "strawberry",
"color": {
"name": "red"
},
"productimage_set": [
{"image": "<some_encode_image_data>"}
]
}
Run Code Online (Sandbox Code Playgroud)
序列化器没有什么特别的,只是提取标签链接,所以我没有写它。如何发送多部分/表单数据以及如何在视图集中解析它?或者解决办法是什么?
python django serialization django-rest-framework django-rest-viewsets