【发布时间】:2017-09-28 19:44:05
【问题描述】:
有两种型号:Product 和 Picture。每个Product 可以有多个Pictures。当我想使用 POST 创建产品时,我有疑问。如何发布包含 ImageField 列表的嵌套对象?
Product 模型是:
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
product_name = models.CharField(max_length=50)
description = models.TextField(blank=True)
Picture 模型是:
class Picture(models.Model):
product = models.ForeignKey(Product, related_name='pictures')
path = models.ImageField(null=False, upload_to='product_pic')
description = models.CharField(max_length=255, null=True, blank=True)
main = models.BooleanField()
我编写 serializer.py 如下:
class PictureSerializer(serializers.ModelSerializer):
class Meta:
model = Picture
fields = ('path', 'description', 'main')
class ProductSerializer(serializers.ModelSerializer):
pictures = PictureSerializer(many=True, required=False)
class Meta:
model = Product
fields = ('product_id', 'product_name', 'pictures', 'description')
我使用的视图是:
class ProductEnum(generics.ListCreateAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
permission_classes = (IsAuthenticated, )
def post(self, request, format=None):
serializer = ProductSerializer(data=request.DATA, files=request.FILES)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我在网址中将其注册为:
url(r'^api/products/$', views.ProductEnum.as_view()),
问题是:
- 我如何测试这个 POST api,因为
django-rest-framework告诉我“HTML 输入中当前不支持列表” - 如何使用 JSON 发布具有多个
Pictures的Product资源。或者我必须使用多部分解析器。 - 如何编写 cURL 命令?
【问题讨论】:
-
你做对了吗?
标签: json post curl django-rest-framework imagefield