Я хочу реализовать 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')
...... .................................................. .................................................. .................................................. ............................