Как добавить несколько позиций заказа в один заказ
Отказ от ответственности: Я новичок в django и пытаюсь создать магазин покупок
Вот мои models.py
class Service(models.Model):
name = models.CharField("name",max_length=255)
class Order(models.Model):
date = models.DateField(auto_now_add=True)
isDelete = models.BooleanField(default=False)
class OrderItem(models.Model):
order_id = models.ForeignKey(Order, on_delete=models.CASCADE, null=False)
service_id = models.ForeignKey(Service, on_delete=models.CASCADE, null=False)
quantity = models.PositiveIntegerField(null=False)
price = models.DecimalField(decimal_places=2,max_digits=99, null=False)
Я сделал эту функцию api_view, которая может создать один заказ с одним элементом заказа.
Примечание: у меня нет никаких сериализаторов для этого.
Я запускаю этот api через Postman.
@api_view(['GET', 'POST'])
@csrf_exempt
# class CreteOrderView(View):
def create_order(request, *args, **kwargs):
if request.method == 'POST':
now = datetime.date.today()
order = Order.objects.create(date=now)
order.save()
orderid = order.id
order_id = orderid
orderitems = OrderItem.objects.all().values()
price = request.POST.get('price')
quantity = request.POST.get('quantity')
service_id = request.POST.get('service_id')
orderitemcreate= OrderItem.objects.create(order_id_id=order_id,
service_id_id=service_id,quantity=quantity,price=price)
orderitemcreate.save()
return Response({"Order Created"})
else:
order_qs = models.Order.objects.all().values_list()
OrderItem_qs = models.OrderItem.objects.all().values_list()
return Response({"Order":str(order_qs),"OrderItem":str(OrderItem_qs)})
Проблемы:
Он принимает данные только через форму данных (но я хочу отправить данные в форме json)
Я хочу добавить несколько позиций заказа в один заказ.
Есть ли какое-нибудь решение для этого?
Ожидаемый вход/выход:
[
{
"service_id": 1,
"quantity": 2
"price": 20,
},
{
"service_id": 2,
"quantity": 2
"price": 20,
},
{
"service_id": 3,
"quantity": 2
"price": 20,
},
]
Прежде всего, необходимо убедиться, что имена переменных имеют одинаковый характер. Иногда используется змеиный регистр, иногда верблюжий, ...
class Service(models.Model):
name = ...
class Order(models.Model):
date = ...
is_delete = ...
class OrderItem(models.Model):
order = ...
service = ...
quantity = ...
price = ...
Что такое Order.is_delete
? Я думаю, что ОП захочет вместо этого что-то под названием is_paid
? (Чтобы проверить, был ли заказ оплачен или нет.)
В любом случае...
Ваша функция, похоже, была разработана с учетом обычного веб-приложения с корзиной. В этом случае заказ создается, когда пользователь делится информацией, а пункты заказа основываются на товарах, присутствующих в корзине.
В данном случае все иначе... ОП хочет, чтобы функция запрашивала у пользователя конкретные данные, позволяющие ему
- Создать экземпляр заказа
- Создайте экземпляры OrderItem, используя определенный экземпляр Заказа и Службы
Я хочу добавить несколько позиций заказа в один заказ.
Как OP узнает, какие товары пользователь размещает в заказе? Нет никакого способа узнать это с вашей текущей функцией.
Он должен запросить у пользователя конкретные данные, которые позволят ОП сделать это.
Тогда ОП может создать OrderItems
OrderItem.objects.create(order=order, service=...)
Кроме того, вы уверены, что ожидаемый вход/выход правильный? Он не включает заказ банкомата.