我目前有如下所示的模型
class Product(models.Model):
name = models.CharField(max_length=200, null=True)
stock = models.CharField(max_length=200, null=True)
class Order(models.Model):
product = models.ForeignKey(Product, null=True, on_delete = models.SET_NULL)
您会看到订单模型将产品模型作为外键。
当我基于订单模型创建或更新实例时,我想从产品模型的库存字段中减少一个值。
创建和更新实例时,我的观点请参见下文。
@login_required
def newOrder(request):
form = CreateOrderForm()
if request.method == 'POST':
form = CreateOrderForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('customer_order_list')
return render(request, 'accounts/new_order.html', {'form': form})
@login_required
def editOrder(request, pk):
order = Order.objects.get(id=pk)
sho = Order.objects.all().values_list('date_created')
order_date = sho.filter(id=pk)
form = CreateOrderForm(instance=order)
if request.method == "POST":
form = CreateOrderForm(request.POST, instance=order)
if form.is_valid():
form.save()
return redirect('customer_order_list')
return render(request, 'accounts/edit_order.html', {'form': form, 'order_date': order_date})
我知道将需要使用以下类似示例,但是我将不得不使用该特定实例的主键。
with transaction.atomic():
product = (
Product.objects
.select_for_update()
.get(id=1)
)
product.inventory -= 1
product.save()
但是,此示例不适用于基于订单表单创建实例。
如何实现呢?