Sco*_*d77 9 post json curl imagefield django-rest-framework
有两种型号:Product和Picture.每个都Product可以有几个Picture.当我想使用POST创建产品时,我有疑问.如何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)
Run Code Online (Sandbox Code Playgroud)
该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()
Run Code Online (Sandbox Code Playgroud)
我写了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')
Run Code Online (Sandbox Code Playgroud)
我使用的观点是:
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)
Run Code Online (Sandbox Code Playgroud)
我正在网址中注册:
url(r'^api/products/$', views.ProductEnum.as_view()),
Run Code Online (Sandbox Code Playgroud)
问题是:
django-rest-framework告诉我"HTML输入当前不支持列表"Product多个资源Pictures.或者我必须使用multipart解析器.您可以使用manage.py shell。像这样:
import requests
r = requests.post("http://localhost:8000/login/url", data={"username": "username", "password": "password"}
r.content (outputs token)
token="yourtoken"
r = requests.post("http://localhost:8000/your/url", data={your POST data in json}, headers={"Authorization": "Token %s" % token})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |