Обновление количества запасов при размещении заказа в приложении Django
У меня есть модели создания продукта и заказа, в которых я хотел бы обновить количество продукта, когда заказ размещен для этого продукта. Используя ForeignKey, я могу выбрать продукт, но пока что я определенно что-то упускаю, так как ничего из того, что я пробовал, не работает, пожалуйста, посмотрите на мой код ниже и помогите. Заранее благодарю
Models.py
#Product Model
class Product(models.Model):
SKU = models.CharField(max_length=30, unique=False,default='input SKU')
Category = models.CharField(max_length=200,default='Input Category')
Name = models.CharField(max_length=250,unique=False, default='Input product name')
Platform = models.CharField(max_length=50, default='platform')
Price = models.PositiveIntegerField(default='price')
Discount = models.PositiveIntegerField(default='discount')
Prod_Qty = models.PositiveIntegerField(unique=False, default=0)
Date = models.CharField(max_length=30, default='Char field')
Cost = models.PositiveIntegerField()
created_date = models.DateField(auto_now_add=True)
def __str__(self):
return self.Name
class Order(models.Model):
STATUS_CHOICE = (
('pending', 'Pending'),
('decline', 'Decline'),
('approved', 'Approved'),
('processing', 'Processing'),
('complete', 'Complete'),
('bulk', 'Bulk'),
)
SALE_CHOICE = (
('platform1', 'platform1'),
('platform2','platform2')
)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(null=False)
sale_type = models.CharField(max_length=50, choices=SALE_CHOICE, null=True)
cost_goods_sold = models.PositiveIntegerField(default=6)
shipping_fee = models.PositiveIntegerField(null=False)
shipping_cost = models.PositiveIntegerField(default=0)
buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE, null=True)
manifest = models.ForeignKey(Manifest, on_delete=models.CASCADE)
status = models.CharField(max_length=10, choices=STATUS_CHOICE)
created_date = models.DateField(auto_now_add=True)
def __str__(self):
return self.product.Name
Views.py
# Product views
@login_required(login_url='login')
def create_product(request):
forms = ProductForm()
context = {"form": forms}
if request.method == 'POST':
forms = ProductForm(request.POST)
context['form'] = forms
if forms.is_valid():
try:
forms.save()
return HttpResponseRedirect(reverse('product-list'))
except IntegrityError:
print ("Print data entry to db failed")
return render(request, 'store/create_product.html', context)
else:
print('invalid form received')
return render(request, 'store/create_product.html', context)
else:
return render(request, 'store/create_product.html', context)
class ProductListView(ListView):
model = Product
template_name = 'store/product_list.html'
context_object_name = 'product'
# Order views
@login_required(login_url='login')
def create_order(request):
forms = OrderForm()
if request.method == 'POST':
forms = OrderForm(request.POST)
if forms.is_valid():
supplier = forms.cleaned_data['supplier']
product = forms.cleaned_data['product']
quantity = forms.cleaned_data['quantity']
sale_type = forms.cleaned_data['sale_type']
buyer = forms.cleaned_data['buyer']
manifest = forms.cleaned_data['manifest']
status = forms.cleaned_data['status']
order_item = Order.objects.create(
supplier=supplier,
product=product,
quantity=quantity,
sale_type=sale_type,
buyer=buyer,
manifest=manifest,
status='pending'
)
remaining_stock = Product.objects.get(id=Product.Name.id)
remaining_stock.Prod_Qty = remaining_stock.Prod_Qty - order_item.quantity
remaining_stock.save()
return redirect('order-list')
context = {
'form': forms
}
return render(request, 'store/create_order.html', context)
возможно, вы можете использовать сигналы
это простой пример, но вы можете встроить продукт и заказ
def save_profile(sender, instance, **kwargs):
instance.profile.save()
post_save.connect(save_profile, sender=User)
Здесь документы