купить x получить y бесплатно drf django - PullRequest
0 голосов
/ 25 марта 2020

Я хочу реализовать buy x get y на моделях продуктов, и только пользователь перечисляет в API заказа.

models.py:

class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.CharField(max_length=10)

    def __str__(self):
        return self.name



class OrderProduct(models.Model):
     order_status = (
        ('created','created'), 
        ('processing','processing'),
        ('ordered','ordered')
     )
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    item = models.ForeignKey(Product,on_delete=models.CASCADE, related_name='products')
    order_status = models.CharField(choices=order_status,null=True,max_length=50)
    ordered_date = models.DateTimeField(auto_now_add=True,blank=True,null=True)

    def __str__(self):
        return str(self.user)

serializers.py:

class Product(models.Model):
name = models.CharField(max_length=50)
price = models.CharField(max_length=10)

def __str__(self):
    return self.name



class OrderProduct(models.Model):
     order_status = (
       ('created','created'), 
    ('processing','processing'),
    ('ordered','ordered')
)
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    item = models.ForeignKey(Product,on_delete=models.CASCADE, related_name='products')
    order_status = models.CharField(choices=order_status,null=True,max_length=50)
    ordered_date = models.DateTimeField(auto_now_add=True,blank=True,null=True)

    def __str__(self):
        return str(self.user)

serializers.py:

class ProductSerializers(serializers.ModelSerializer):
    class Meta:
         model = Product
         fields = '__all__'


class OrderProductSerializers(serializers.Serializer):
     user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
     item = ProductSerializers(many=True, read_only=True)

    class Meta:
         models = OrderProduct
         fields = ('item','user','order_status','ordered_date')

views.py:

class ProductViewSet(viewsets.ModelViewSet):
      queryset = Product.objects.all()
      serializer_class = ProductSerializers

class OrderViewSet(viewsets.ModelViewSet):
     def list(self, request):
         queryset = OrderProduct.objects.all()
         serializer = OrderProductSerializers(queryset, many=True)
         return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = OrderProduct.objects.get(pk=pk)
        serializer = OrderProductSerializers(queryset)
        return Response(serializer.data)

    def create(self,request):
        data = request.data.get("order")
        serializer = OrderProductSerializers(data=data,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)

urls.py:

path('product/list/',ProductViewSet.as_view({'get':'list'}),name='product_list'),
path('product/<pk>/',ProductViewSet.as_view({'get':'retrieve'}),name='product_retrieve'),
path('product/',ProductViewSet.as_view({'post':'create'}), name='product_create'),
path('order/list/',OrderViewSet.as_view({'get':'list'}),name='order_list'),
path('order/<pk>/',OrderViewSet.as_view({'get':'retrieve'}),name='order_retrieve'),
path('order/',OrderViewSet.as_view({'post':'create'}), name='order_create')

...... .................................................. .................................................. .................................................. ............................

...