Обновление количества запасов при размещении заказа в приложении 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)

Здесь документы

Вернуться на верх