POST API 可浏览视图中未出现的字段 - django Rest Framework

Yue*_*Hui 6 python django django-rest-framework

我正在尝试使用 django Rest 框架编写用于将产品添加到购物车的 API。我写了一个简单的serializer.py 和view.py。

模型.py:

class Product(models.Model):
    title = models.CharField(max_length=100,unique=True)
    description = models.TextField()
    image_url = models.URLField(max_length=200)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    date_available = models.DateField
class LineItem(models.Model):
    product = models.ForeignKey(Product)
    unit_price = models.DecimalField(max_digits=8,decimal_places=2)
    quantity = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

class LineItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = LineItem
        fields = ('product', 'unit_price', 'quantity')

    def product(self, instance):
        return instance.product.title
Run Code Online (Sandbox Code Playgroud)

视图.py

class RESTforCart(APIView):
    def post(self, request, *args, **kwargs):
        #print request.POST['product']
        product = Product.objects.get(id=request.POST['product'])
        cart = request.session['cart']
        cart.add_product(product)
        request.session['cart'] = cart
        lists=request.session['cart'].items 
        serializer = LineItemSerializer(lists,many=True)
        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)

def get(self, request, *args, **kwargs):
    lists=request.session['cart'].items 
    serializer = LineItemSerializer(lists,many=True)
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

网址.py

(r'^shoppinglists2/$', RESTforCart.as_view()),
Run Code Online (Sandbox Code Playgroud)

[我的可浏览视图如下所示:只有内容字段。没有单价和数量字段]

在此处输入图片说明

Tha*_*eem 5

from rest_framework.renderers import (
                                        HTMLFormRenderer, 
                                        JSONRenderer, 
                                        BrowsableAPIRenderer,
                                    )

class CustomerApi(APIView):

    serializer_class = CustomerSerializer
    renderer_classes = (BrowsableAPIRenderer, JSONRenderer, HTMLFormRenderer)

   ..... give whatever methods here 
Run Code Online (Sandbox Code Playgroud)

您必须添加serializer_class = <your serializer>才能在可浏览的 api 中显示表单


ils*_*005 2

您的可浏览 api 看起来没问题。您必须将 JSON 对象插入到内容字段中并将其发布到 api。您的 JSON 可能如下所示:

{
   "product": 1,
   "unit_price": "22",
   "quantity": 5
}
Run Code Online (Sandbox Code Playgroud)