【问题标题】:How to update stock through purchase and sale in Django?如何在 Django 中通过购买和销售来更新库存?
【发布时间】:2022-01-11 18:33:30
【问题描述】:

我正在开发 Django Billing Webapp/Invoicing Webapp。我在通过采购和销售更新库存时遇到问题。我希望药量在有购买时增加,在销售时减少。但经过多次尝试,我无法实现。请帮助我将此功能集成到我的 Django WebApp 中。以下是文件内容:

Models.py

from django.db import models
from django.utils import timezone
from django.shortcuts import render, get_object_or_404
#------------------------Medicine models----------------------------------
gst = (
    (0, '0%'),
    (5, '5%'),
    (12, '12%'),
    (18, '18%'),
)
# Create your models here.
class Medicines(models.Model):
    Med_HSN = models.IntegerField(default=0)
    Med_name = models.CharField(max_length=20)
    Med_Quantity = models.IntegerField(default=0)
    Med_Manufacturer = models.CharField(blank=True,max_length=50)
    Med_Expiry = models.CharField(default=1,max_length=10)
    Med_Batch_no = models.CharField(blank=True,max_length=15)
    Med_MRP = models.FloatField(blank=False)
    Med_Rate = models.FloatField(blank=False)
    Med_GST = models.IntegerField(default=0,choices=gst)
    date_created = models.DateField(default=timezone.now)

    def caluclate_value(self):
        value = self.Med_MRP * (self.Med_GST/100)
        total_value = self.Med_MRP + value 
        return total_value

    def get_cost(self):
        return self.caluclate_value() * self.Med_Quantity

    def __str__(self):
        return self.Med_name + "  :  " + str(self.caluclate_value())

    # def caluclate_stock(self):
    #     med_quantity = self(request=self.request).Med_Quantity
    #     get_med_1_quantity = Purchase.med_quantity_1
    #     value = med_quantity + get_med_1_quantity
    #     print(value)
    #     return value
#----------------------------------End Medicines Models--------------------------------------

#---------------------------------Sales Models--------------------------------
from django.core.checks import messages
from django.db import models
from Customer.models import Customer
from django.utils import timezone
import math

payment_status = (
    ('Due', 'Due'),
    ('Paid|Cash', 'Paid|Cash'),
    ('Paid|Cheque', 'Paid|Cheque'),
    ('Paid|Online', 'Paid|Online'),
    ('Cancelled','Cancelled')
)
dis = (
    (0, '0%'),
    (5, '5%'),
    (10, '10%'),
    (15, '15%'),
    (20, '20%'),
)
# Create your models here.
class Sales(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE)
    prescribed_doctor = models.CharField(blank=True,max_length=150)
    date_created = models.DateTimeField(default=timezone.now)
    sales_medicine_1 = models.ForeignKey(Medicines,related_name='sales_medicine',on_delete=models.CASCADE)
    Med_quantity_1 = models.IntegerField(blank=False,default=1)
    Free_quantity_1 = models.IntegerField(blank=True,default=0)
    discount_1 = models.IntegerField(choices=dis,default=0)
    rate_1 = models.IntegerField(blank=True,default=0)
    sales_medicine_2 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_1',on_delete=models.CASCADE)
    Med_quantity_2 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_2 = models.IntegerField(blank=True,default=0)
    discount_2 = models.IntegerField(choices=dis,default=0)
    rate_2 = models.IntegerField(blank=True,default=0)
    sales_medicine_3 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_2',on_delete=models.CASCADE)
    Med_quantity_3 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_3 = models.IntegerField(blank=True,default=0)
    discount_3 = models.IntegerField(choices=dis,default=0)
    rate_3 = models.IntegerField(blank=True,default=0)
    sales_medicine_4 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_3',on_delete=models.CASCADE)
    Med_quantity_4 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_4 = models.IntegerField(blank=True,default=0)
    discount_4 = models.IntegerField(choices=dis,default=0)
    rate_4 = models.IntegerField(blank=True,default=0)
    sales_medicine_5 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_4',on_delete=models.CASCADE)
    Med_quantity_5 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_5 = models.IntegerField(blank=True,default=0)
    discount_5 = models.IntegerField(choices=dis,default=0)
    rate_5 = models.IntegerField(blank=True,default=0)
    sales_medicine_6 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_5',on_delete=models.CASCADE)
    Med_quantity_6 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_6 = models.IntegerField(blank=True,default=0)
    discount_6 = models.IntegerField(choices=dis,default=0)
    rate_6 = models.IntegerField(blank=True,default=0)
    sales_medicine_7 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_6',on_delete=models.CASCADE)
    Med_quantity_7 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_7 = models.IntegerField(blank=True,default=0)
    discount_7 = models.IntegerField(choices=dis,default=0)
    rate_7 = models.IntegerField(blank=True,default=0)
    sales_medicine_8 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_7',on_delete=models.CASCADE)
    Med_quantity_8 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_8 = models.IntegerField(blank=True,default=0)
    discount_8 = models.IntegerField(choices=dis,default=0)
    rate_8 = models.IntegerField(blank=True,default=0)
    sales_medicine_9 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_8',on_delete=models.CASCADE)
    Med_quantity_9 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_9 = models.IntegerField(blank=True,default=0)
    discount_9 = models.IntegerField(choices=dis,default=0)
    rate_9 = models.IntegerField(blank=True,default=0)
    sales_medicine_10 = models.ForeignKey(Medicines,blank=True,null=True,related_name='sales_medicine_9',on_delete=models.CASCADE)
    Med_quantity_10 = models.IntegerField(blank=True,null=True,default=0)
    Free_quantity_10 = models.IntegerField(blank=True,default=0)
    discount_10 = models.IntegerField(choices=dis,default=0)
    rate_10 = models.IntegerField(blank=True,default=0)
    Payment_status = models.CharField(max_length=15,choices=payment_status)
    Paid_amount = models.FloatField(blank=True,default=0)
    # Due_amount = models.IntegerField(blank=True,default=0)
    # Total_amount = models.IntegerField(blank=True,default=0)

    def __str__(self):
        return self.customer_name



#----------------------------End Sales----------------------------------------------------
#------------------------------Purchase----------------------------------------------------------------
from django.db import models
from django.utils import timezone
from Wholeseller.models import Wholeseller
import math
# Create your models here.


payment_status = (
    ('Due', 'Due'),
    ('Paid|Cash', 'Paid|Cash'),
    ('Paid|Cheque', 'Paid|Cheque'),
    ('Paid|Online', 'Paid|Online'),
    ('Cancelled','Cancelled')
)

class Purchase(models.Model):
    wholeseller = models.ForeignKey(Wholeseller,on_delete=models.CASCADE)
    date_created = models.DateTimeField(default=timezone.now)
    delivery_date = models.CharField(blank=True,max_length=20)
    medicine_1 = models.ForeignKey(Medicines,related_name="medicine_1",on_delete=models.CASCADE)
    med_quantity_1 = models.IntegerField(blank=False,default=1)
    Free_Quantitiy_1 = models.IntegerField(blank=True,default=0)
    medicine_2 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_2",on_delete=models.CASCADE)
    med_quantity_2 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_2 = models.IntegerField(blank=True,default=0)
    medicine_3 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_3",on_delete=models.CASCADE)
    med_quantity_3 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_3 = models.IntegerField(blank=True,default=0)
    medicine_4 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_4",on_delete=models.CASCADE)
    med_quantity_4 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_4 = models.IntegerField(blank=True,default=0)
    medicine_5 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_5",on_delete=models.CASCADE)
    med_quantity_5 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_5 = models.IntegerField(blank=True,default=0)
    medicine_6 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_6",on_delete=models.CASCADE)
    med_quantity_6 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_6 = models.IntegerField(blank=True,default=0)
    medicine_7 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_7",on_delete=models.CASCADE)
    med_quantity_7 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_7 = models.IntegerField(blank=True,default=0)
    medicine_8 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_8",on_delete=models.CASCADE)
    med_quantity_8 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_8 = models.IntegerField(blank=True,default=0)
    medicine_9 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_9",on_delete=models.CASCADE)
    med_quantity_9 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_9 = models.IntegerField(blank=True,default=0)
    medicine_10 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_10",on_delete=models.CASCADE)
    med_quantity_10 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_10 = models.IntegerField(blank=True,default=0)
    medicine_11 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_11",on_delete=models.CASCADE)
    med_quantity_11 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_11 = models.IntegerField(blank=True,default=0)
    medicine_12 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_12",on_delete=models.CASCADE)
    med_quantity_12 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_12 = models.IntegerField(blank=True,default=0)
    medicine_13 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_13",on_delete=models.CASCADE)
    med_quantity_13 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_13 = models.IntegerField(blank=True,default=0)
    medicine_14 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_14",on_delete=models.CASCADE)
    med_quantity_14 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_14 = models.IntegerField(blank=True,default=0)
    medicine_15 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_15",on_delete=models.CASCADE)
    med_quantity_15 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_15 = models.IntegerField(blank=True,default=0)
    medicine_16 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_16",on_delete=models.CASCADE)
    med_quantity_16 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_16 = models.IntegerField(blank=True,default=0)
    medicine_17 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_17",on_delete=models.CASCADE)
    med_quantity_17 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_17 = models.IntegerField(blank=True,default=0)
    medicine_18 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_18",on_delete=models.CASCADE)
    med_quantity_18 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_18 = models.IntegerField(blank=True,default=0)
    medicine_19 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_19",on_delete=models.CASCADE)
    med_quantity_19 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_19 = models.IntegerField(blank=True,default=0)
    medicine_20 = models.ForeignKey(Medicines,blank=True,null=True,related_name="medicine_20",on_delete=models.CASCADE)
    med_quantity_20 = models.IntegerField(blank=True,default=0)
    Free_Quantitiy_20 = models.IntegerField(blank=True,default=0)
    Payment_status = models.CharField(max_length=15,choices=payment_status)
    Paid_amount = models.IntegerField(blank=True,default=0)
    # Due_amount = models.IntegerField(blank=True,default=0)
    Discount_amount = models.IntegerField(blank=True,default=0)
    # Total_amount = models.IntegerField(blank=True)

    def __str__(self): 
        return self.wholeseller_name 

Views.py

from django.shortcuts import render, redirect
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView

from .models import Purchase
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.views.generic import View
from itertools import chain

 
#importing get_template from loader
from django.template.loader import get_template
 
#import render_to_pdf from util.py 
from .utils import render_to_pdf 

#-----------------------------------------Purchase-----------------------------------------------
# Create your views here.
class PurchaseListView(ListView):
    model = Purchase
    template_name = 'Purchase.html'
    context_object_name = 'purchases'
    ordering = ['-date_created'] #ordering is set to category
    # paginate_by = 12
    # extra_context= {'title':'HTML & CSS'}

class PurchaseDetailView(DetailView):
    model = Purchase
    template_name = 'Purchase_detail.html'
    extra_context= {'title':'Post Details'}

    def get_context_data(self, *args, **kwargs):
        context = super(PurchaseDetailView, self).get_context_data(*args, **kwargs)
        stuff = get_object_or_404(Purchase, id=self.kwargs['pk'])
        return context

class PurchaseCreateView(CreateView):
    model = Purchase
    template_name = 'new_purchase.html'
    fields = ['wholeseller','date_created','delivery_date','medicine_1','med_quantity_1','Free_Quantitiy_1','medicine_2','med_quantity_2','Free_Quantitiy_2',
    'medicine_3','med_quantity_3','Free_Quantitiy_3','medicine_4','med_quantity_4','Free_Quantitiy_4','medicine_5','med_quantity_5','Free_Quantitiy_5',
    'medicine_6','med_quantity_6','Free_Quantitiy_6','medicine_7','med_quantity_7','Free_Quantitiy_7','medicine_8','med_quantity_8','Free_Quantitiy_8',
    'medicine_9','med_quantity_9','Free_Quantitiy_9','medicine_10','med_quantity_10','Free_Quantitiy_10','medicine_11','med_quantity_11','Free_Quantitiy_11',
    'medicine_12','med_quantity_12','Free_Quantitiy_12','medicine_13','med_quantity_13','med_quantity_13','medicine_14','med_quantity_14','Free_Quantitiy_14',
    'medicine_15','med_quantity_15','Free_Quantitiy_15','medicine_16','med_quantity_16','Free_Quantitiy_16','medicine_17','med_quantity_17','Free_Quantitiy_17',
    'medicine_18','med_quantity_18','Free_Quantitiy_18','medicine_19','med_quantity_19','Free_Quantitiy_19','medicine_20','med_quantity_20','Free_Quantitiy_20',
    'Payment_status','Paid_amount','Discount_amount']
    success_url = "/purchase/"
    extra_context= {'title':'Post Create'}


class PurchaseUpdateView(UpdateView):
    model = Purchase
    template_name = 'Purchase_update.html'
    fields = ['wholeseller','date_created','delivery_date','medicine_1','med_quantity_1','Free_Quantitiy_1','medicine_2','med_quantity_2','Free_Quantitiy_2',
    'medicine_3','med_quantity_3','Free_Quantitiy_3','medicine_4','med_quantity_4','Free_Quantitiy_4','medicine_5','med_quantity_5','Free_Quantitiy_5',
    'medicine_6','med_quantity_6','Free_Quantitiy_6','medicine_7','med_quantity_7','Free_Quantitiy_7','medicine_8','med_quantity_8','Free_Quantitiy_8',
    'medicine_9','med_quantity_9','Free_Quantitiy_9','medicine_10','med_quantity_10','Free_Quantitiy_10','medicine_11','med_quantity_11','Free_Quantitiy_11',
    'medicine_12','med_quantity_12','Free_Quantitiy_12','medicine_13','med_quantity_13','med_quantity_13','medicine_14','med_quantity_14','Free_Quantitiy_14',
    'medicine_15','med_quantity_15','Free_Quantitiy_15','medicine_16','med_quantity_16','Free_Quantitiy_16','medicine_17','med_quantity_17','Free_Quantitiy_17',
    'medicine_18','med_quantity_18','Free_Quantitiy_18','medicine_19','med_quantity_19','Free_Quantitiy_19','medicine_20','med_quantity_20','Free_Quantitiy_20',
    'Payment_status','Paid_amount','Discount_amount']
    success_url = "/purchase/"
    extra_context= {'title':'Post Update'}

class PurchaseDeleteView(DeleteView):
    model = Purchase
    template_name = 'purchase_delete.html'
    success_url='/purchase/'
    context_object_name = 'purchase'
    extra_context= {'title':'Post Delete'}
 
#Creating our view, it is a class based view
# class GeneratePdf(View):
def GeneratePdf_Purchase(request,pk):
    # sales = Sales.objects.all()
    context ={}

# add the dictionary during initialization
    context["purchase"] = Purchase.objects.get(pk = pk)
    #getting the template
    pdf = render_to_pdf('Bill_purchase.html',context)
        
        #rendering the template
    return HttpResponse(pdf, content_type='application/pdf')


#------------------------------------------------------------End Purchase -------------------------------------------------------------------

#---------------------------------------------------Sales--------------------------------------------------------------
from .models import Medicines
from .models import Sales

# Create your views here.
class SalesListView(ListView):
    model = Sales
    template_name = 'sales.html'
    context_object_name = 'sales'
    ordering = ['-date_created'] #ordering is set to category
    # paginate_by = 12
    # extra_context= {'title':'HTML & CSS'}

class SalesDetailView(DetailView):
    model = Sales
    template_name = 'sales_detail.html'
    extra_context= {'title':'Post Details'}

    def get_context_data(self, *args, **kwargs):
        context = super(SalesDetailView, self).get_context_data(*args, **kwargs)
        stuff = get_object_or_404(Sales, id=self.kwargs['pk'])
        return context


class SalesCreateView(CreateView):
    model = Sales
    template_name = 'new_sales.html'
    fields = ['customer','prescribed_doctor','Payment_status'
        ,'date_created','sales_medicine_1','Med_quantity_1','Free_quantity_1','discount_1','rate_1','sales_medicine_2','Med_quantity_2','Free_quantity_2','discount_2','rate_2',
        'sales_medicine_3','Med_quantity_3','Free_quantity_3','discount_3','rate_3','sales_medicine_4','Med_quantity_4','Free_quantity_4','discount_4','rate_4',
        'sales_medicine_5','Med_quantity_5','Free_quantity_5','discount_5','rate_5','sales_medicine_6','Med_quantity_6','Free_quantity_6','discount_6','rate_6',
        'sales_medicine_7','Med_quantity_7','Free_quantity_7','discount_7','rate_7','sales_medicine_8','Med_quantity_8','Free_quantity_8','discount_8','rate_8',
        'sales_medicine_9','Med_quantity_9','Free_quantity_9','discount_9','rate_9','sales_medicine_10','Med_quantity_10','Free_quantity_10','discount_10','rate_10',
        'Paid_amount']
    success_url = "/sale/"
    extra_context= {'title':'Post Create'}


class SalesUpdateView(UpdateView):
    model = Sales
    template_name = 'sales_update.html'
    fields = ['customer','prescribed_doctor','Payment_status'
        ,'date_created','sales_medicine_1','Med_quantity_1','Free_quantity_1','discount_1','rate_1','sales_medicine_2','Med_quantity_2','Free_quantity_2','discount_2','rate_2',
        'sales_medicine_3','Med_quantity_3','Free_quantity_3','discount_3','rate_3','sales_medicine_4','Med_quantity_4','Free_quantity_4','discount_4','rate_4',
        'sales_medicine_5','Med_quantity_5','Free_quantity_5','discount_5','rate_5','sales_medicine_6','Med_quantity_6','Free_quantity_6','discount_6','rate_6',
        'sales_medicine_7','Med_quantity_7','Free_quantity_7','discount_7','rate_7','sales_medicine_8','Med_quantity_8','Free_quantity_8','discount_8','rate_8',
        'sales_medicine_9','Med_quantity_9','Free_quantity_9','discount_9','rate_9','sales_medicine_10','Med_quantity_10','Free_quantity_10','discount_10','rate_10',
        'Paid_amount']
    success_url = "/sale/"
    extra_context= {'title':'Post Update'}

class SalesDeleteView(DeleteView):
    model = Sales
    template_name = 'sales_delete.html'
    success_url='/sale/'
    context_object_name = 'Sales'
    extra_context= {'title':'Post Delete'}


#Creating our view, it is a class based view
# class GeneratePdf_Sale(View):
def GeneratePdf_Sale(request,pk):
    # sales = Sales.objects.all()
    context ={}

# add the dictionary during initialization
    context["sales"] = Sales.objects.get(pk = pk)
    #getting the template
    pdf = render_to_pdf('Bill_sale.html',context)
        
        #rendering the template
    return HttpResponse(pdf, content_type='application/pdf')

#------------------------------------------------------End Sales-------------------------------------------------------------
#------------------------------------------------------Stock--------------------------------------------------------------

# Create your views here.
class MedicineListView(ListView):
    model = Medicines
    template_name = 'in_stock.html'
    context_object_name = 'stocks'
    ordering = ['-date_created'] #ordering is set to category
    # paginate_by = 12
    # extra_context= {'title':'HTML & CSS'}

class MedicineDetailView(DetailView):
    model = Medicines
    template_name = 'stock_details.html'
    extra_context= {'title':'Post Details'}

    def get_context_data(self, *args, **kwargs):
        context = super(MedicineDetailView, self).get_context_data(*args, **kwargs)
        stuff = get_object_or_404(Medicines, id=self.kwargs['pk'])
        # add = get_object_or_404(Medicines, Med_Mrp = self.kwargs['Med_MRP'])
        return context

class MedicineCreateView(CreateView):
    model = Medicines
    template_name = 'stock_new.html'
    fields = ['Med_HSN','Med_name','Med_Quantity','Med_Manufacturer','Med_Expiry','Med_Batch_no'
        ,'Med_MRP','Med_Rate','Med_GST']
    success_url = "/stock/"
    extra_context= {'title':'Post Create'}


class MedicineUpdateView(UpdateView):
    model = Medicines
    template_name = 'stock_update.html'
    fields = ['Med_HSN','Med_name','Med_Quantity','Med_Manufacturer','Med_Expiry','Med_Batch_no'
        ,'Med_MRP','Med_Rate','Med_GST']
    success_url = "/stock/"
    extra_context= {'title':'Post Update'}

class MedicineDeleteView(DeleteView):
    model = Medicines
    template_name = 'stock-delete.html'
    success_url='/stock/'
    context_object_name = 'Medicine'
    extra_context= {'title':'Post Delete'}

TextBody 限制为 30000 个字符,因此无法上传其他文档。如果您需要其他文件,请告诉我。

【问题讨论】:

  • 你做错了,你可能使用从 Medicine 到 Sales 的单个外键而不是 N 个 sales_medicine_X 键,你在其他关系中也做过这件事。这对您在旅途中可能非常困难。
  • 感谢您的回复 Sumithran。我承认你的回复。你能告诉我我怎样才能实现你所说的吗?我是 Django 新手,非常感谢您的帮助。
  • docs.djangoproject.com/fr/3.2/topics/signals 是您在更新库存后所追求的。但你确实需要先重构你的模型
  • 我只有这种方法和另一种是多对多关系的方法。我可以知道你重构模型的方式,以便我提高应用程序的效率吗?

标签: python django django-models django-views invoice


【解决方案1】:

这是一个完整的零件/库存程序示例。它具有购买和位置,安装在销售/发票上,它具有发布选项,就功能而言接近发票。
这可能是最接近您的项目的库存零件计划。

https://github.com/edcodes/Django-Parts-Inventory
通过购买它添加到总库存的零件,您还可以选择为内部库存选择不同的存储位置。
此外,一旦您发布零件,它就会自动从库存中扣除

【讨论】:

  • 作为一个新手,我在理解 github 项目特别是 views.py 文件时遇到了问题。你能把它简单点或解释一下吗?
【解决方案2】:

经过大量尝试,我找到了一种通过购销单更新库存的方法,方法如下: Signals.py(购买)

@receiver(post_save,sender=Purchase)
def increase_stocks(sender,created,instance,**kwargs):
    if created:
        if instance.medicine_1 != None:
            print(instance.med_quantity_1)
            print(instance.medicine_1.Med_Quantity)
            print(instance.medicine_1.id)
            ordered_qty = instance.med_quantity_1
            stocked_qty = instance.medicine_1.Med_Quantity
            free_stocked_qty = instance.Free_Quantitiy_1
            value = (stocked_qty + ordered_qty) + free_stocked_qty
            instance.medicine_1.Med_Quantity = value
            instance.medicine_1.save()

Signals.py(销售)

@receiver(post_save, sender=Sales)
def decrease_stocks(sender,created,instance,**kwargs):
    if created:
        print(instance.Med_quantity_1)
        print(instance.sales_medicine_1.Med_Quantity)
        print(instance.sales_medicine_1.id)
        ordered_qty = instance.Med_quantity_1
        stocked_qty = instance.sales_medicine_1.Med_Quantity
        free_stocked_qty = instance.Free_quantity_1
        if stocked_qty < ordered_qty:
            print("-------------------------------------------")
            print("       We didnt have enough stock          ")
            print("-------------------------------------------")
            messages.Error(instance,"We didn't have enough stock")
            raise LookupError("We didn't have enough stock for this medicine")
        else:
            value = (stocked_qty - ordered_qty) - free_stocked_qty
            instance.sales_medicine_1.Med_Quantity = value
            instance.sales_medicine_1.save()
            redirect('Sales') 

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2014-12-26
    • 2015-10-10
    • 2023-02-01
    • 1970-01-01
    • 2021-10-10
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多