Python Django:下订单时如何减少库存量?

Python Django:下订单时如何减少库存量?,python,django,django-views,Python,Django,Django Views,我的目标是在创建订单时减少库存量。 我的存货是轮胎。 轮胎具有“数量”的“型号”字段 这是我的观点 from django.shortcuts import render, redirect from .models import OrderItem from .forms import OrderCreateForm from cart.cart import Cart from stock.models import Tyre, Branch from django.contrib.aut

我的目标是在创建订单时减少库存量。 我的存货是轮胎。 轮胎具有“数量”的“型号”字段

这是我的观点

from django.shortcuts import render, redirect
from .models import OrderItem
from .forms import OrderCreateForm
from cart.cart import Cart
from stock.models import Tyre, Branch 
from django.contrib.auth.decorators import login_required


@login_required(login_url="/accounts/login/")
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(
                    order=order,
                    tyre=item['tyre'],
                    price=item['price'],
                    quantity=item['quantity']
                )

                # reduce tyre stock quantity
                order_item = OrderItem.objects.get(id=id)
                tyre = Tyre.objects.get(id=id)
                tyre.quantity = tyre.quantity - order_item.quantity
                tyre.save()
           

            cart.clear()

            return redirect('orders:sale-orders')
        # return render(request, 'orders/sale_orders.html', {'order': order})
    else:
        form = OrderCreateForm()
    return render(request, 'orders/create_order.html', {'form': form})

运行代码时,出现以下错误: 在/orders/create处键入错误/ 字段“id”需要一个数字,但得到了

以下是订单应用程序的my models.py:

from django.db import models
from shop.models import Product

class Order(models.Model):
    customer_name = models.CharField(max_length=60)
    contact = models.CharField(max_length=12)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('-created', )

    def __str__(self):
        return 'Order {}'.format(self.id)

    def get_total_cost(self):
        return sum(item.get_cost() for item in self.items.all())


class OrderItem(models.Model):
    order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
    tyre = models.ForeignKey(Tyre, related_name='order_items', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    quantity = models.PositiveIntegerField(default=1)

    def __str__(self):
        return '{}'.format(self.id)

    def get_cost(self):
        return self.price * self.quantity

非常感谢您提供的任何帮助

看起来您正在使用python的内置id函数来执行对OrderItem模型的id字段的赋值。您的代码中似乎缺少某些内容。在
order\u item=OrderItem.objects.get(id=id)

不确定这是否有效

from django.shortcuts import render, redirect
from .models import OrderItem
from .forms import OrderCreateForm
from cart.cart import Cart
from stock.models import Tyre, Branch 
from django.contrib.auth.decorators import login_required


@login_required(login_url="/accounts/login/")
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                order_item = OrderItem.objects.create(
                    order=order,
                    tyre=item['tyre'],
                    price=item['price'],
                    quantity=item['quantity']
                )

                # reduce tyre stock quantity
                tyre = Tyre.objects.get(id=item.id)

                # Not sure if item['tyre'] is an instance of tyre
                # other wise `tyre = item['tyre']` Could also work to replace
                # `tyre = Tyre.objects.get(id=item.id)`

                tyre.quantity = tyre.quantity - order_item.quantity
                tyre.save()
           

            cart.clear()

            return redirect('orders:sale-orders')
        # return render(request, 'orders/sale_orders.html', {'order': order})
    else:
        form = OrderCreateForm()
    return render(request, 'orders/create_order.html', {'form': form})

罗杰斯上面所说的非常接近。 获取轮胎id的线路
tyre=tyre.object.get(id=order\u item.tyre.id)
这解决了一切


谢谢罗杰

您从哪里获得
id
id=item.id
可以解决吗?您好,我已经添加了
order\u item=OrderItem.objects.get(id=id)tire=tire.objects.get(id=item.id)
我得到了这个错误:
TypeError at/orders/create/Field'id'需要一个数字,但得到了。
我应该为
order\u item=OrderItem.objects.get(id=id)
做什么?否则,您将如何识别单个订单?如果没有上下文,很难猜测类的行为如何以及它们之间的关系如何,如果您能提供更多数据,我们可以提供更多帮助。您好,我遵循了本教程,就我的情况而言,我的产品是Tire。订单逻辑与此repo中的相同。我还添加了我的models.py。这是我得到的错误
tire=tire.objects.get(id=item.id):AttributeError at/orders/create/,“dict”对象没有属性“id”
顺便说一句,我在开发它的过程中遵循了一个教程,这是指向github repo的链接