2017-04-08 8 views
0

django RESTフレームワークを使用して、cartという名前のモデルに複数のオブジェクトを追加しようとしています。ユーザはCartオブジェクトの複数のデータセットをCartAddSerializerに送り、シリアライザはデータベースの行を1つずつ追加します。次のように私のコードの進行状況は、これまでのところです:1回の呼び出しで複数のオブジェクトを作成する

models.py:

class Cart(models.Model): 
    user = models.ForeignKey(User) 
    product = models.ForeignKey(Product) 
    sh_price = models.DecimalField(max_digits=10, decimal_places=2) 
    quantity = models.IntegerField() 
    date_added = models.DateTimeField(auto_now_add=True, blank=True, null=True) 

class Meta: 
    unique_together = ["user", "product"] 

serializer.py:

class CartAddSerializer(ModelSerializer): 

def __init__(self, *args, **kwargs): 
    many = kwargs.pop('many', True) 
    super(CartAddSerializer, self).__init__(many=many, *args, **kwargs) 

class Meta: 
    model = Cart 
    fields = ['user', 'product', 'sh_price', 'quantity', 'date_added'] 
    extra_kwargs = {'date_added': {'read_only': True}, 
        'sh_price': {'read_only': True},} 

def create(self, data): 
    product_data = data.get('product' or None) 
    print(product_data) 
    print(product_data.id) 
    product_price = ProductPrice.objects.get(product=product_data) 
    print(product_price) 
    print(product_price.sh_price) 
    return Cart.objects.create(sh_price=product_price.sh_price, **data) 

はviews.py:

一般
class CartAddAPIView(ListCreateAPIView): 
    queryset = Cart.objects.all() 
    serializer_class = CartAddSerializer 
    lookup_field = 'pk' 
    lookup_url_kwarg = 'id' 

    def get(self, request, *args, **kwargs): 
     try: 
      cart = Cart.objects.filter(user=self.kwargs['id']) 
      print(cart) 
      serializer = CartDetailSerializer(cart, many=True, context={'request': request}) 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     except Exception as e: 
      print(str(e)) 
      return Response({"status": "failed"}, status=status.HTTP_400_BAD_REQUEST) 
+0

質問が明確で具体的であることを確認してください。カートを書くことはやや曖昧です。 – Linovia

+0

申し訳ありません。私はいくつかの変更を行った@Linovia –

+0

あなたの実際の質問は何ですか? – Bono

答えて

0

、ListCreateAPIViewですGenericAPIView、ListModelMixin、CreateModelMixinによってミックスされているので、リストオブジェクトの作成機能は提供されません。面白い〜listcreateapiview

これは一例であり、json形式のデータで投稿する必要があります。

[ 
    { 
     "user": 1, 
     "product": 2, 
     "sh_price": 10, 
     "quantity": 3, 
    }, 
    { 
     another object 
    }, 
    ... 
] 


def post(self, request): 
    serializer = self.get_serializer(data=request.data, many=True, context={'request': request}) #many=True 
    serializer.is_valid() #validate request.data 
    serializer.save()  #save every object of request.data 
+0

オブジェクトのリストをシリアル化できる方法がありますか? –

+0

オブジェクトのリストを作成する場合は、このビューを自分で作成する必要があります。 [これを見てください](http://www.django-rest-framework.org/api-guide/serializers/#listserializer)。ちなみに、リストシリアライザをカスタム化する必要はなく、作成するマルチオブジェクトデータをCartAddSerializerに渡してから、serializer.save()を呼び出します。 – Lingbing

+0

コメントに記載した後者のオプションの例を表示できますか? –

関連する問題