【发布时间】: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