Django Соответствующий запрос не существует в AddProduct.objects.get(Name=productname[i])
У меня есть модель AddProduct и StockIn. Когда новый товар закупается у дилера, то все купленные товары добавляются в модель StockIn. А существующие товары обновляются в модели AddProduct. Мои модели AddProduct выглядят следующим образом
class AddProduct(models.Model):
Name = models.CharField(max_length=120,verbose_name="name")
Description = models.CharField(max_length=120, verbose_name="description")
Unit = models.ForeignKey(Unit,on_delete=models.CASCADE,max_length=150,verbose_name='unit')
purchaseRate = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="purchase rate")
AvgRate = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="avg rate")
OpnStock = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="Opening stock")
ClosingStock = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="closing stock")
StoreLocation = models.CharField(max_length=120,verbose_name="store location")
MinStock = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="minimum stock")
ReOrder = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="reorder")
MaxStock = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="maxstock")
Group = models.ForeignKey(ProductGroup,on_delete=models.CASCADE,max_length=150,verbose_name='productgroup')
CGST = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="CGST")
SGST = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="SGST")
IGST = models.DecimalField(max_digits=10, decimal_places=3,verbose_name="IGST")
Validity = models.IntegerField(verbose_name="validity")
Updated = models.DateTimeField(auto_now=True)
тем временем моя модель StockIn выглядит следующим образом
class StockIN(models.Model):
GrnNo = models.IntegerField(verbose_name="GrnNo")
Date = models.DateTimeField(default=timezone.now)
Supplier = models.ForeignKey(AddSupplier,on_delete=models.CASCADE,max_length=150,verbose_name='supplier')
InvoiceNo = models.IntegerField(verbose_name="invoice No")
InvoiceDate = models.DateTimeField(default=timezone.now, verbose_name="Invoice Date")
ProductName = models.CharField(max_length=120,verbose_name="productName")
Quantity = models.IntegerField(verbose_name="quantity")
Unit = models.ForeignKey(Unit,on_delete=models.CASCADE,max_length=150,verbose_name='unit')
Rate = models.CharField(max_length=120,verbose_name="rate")
Value = models.CharField(max_length=120,verbose_name="value")
DisPer = models.CharField(max_length=120,verbose_name="disper")
DisValue = models.CharField(max_length=120,verbose_name="disvalue")
Taxable = models.CharField(max_length=120,verbose_name="taxable")
CGSTPER = models.CharField(max_length=120,verbose_name="cgstper")
CGST = models.CharField(max_length=120,verbose_name="cgst")
SGSTPER = models.CharField(max_length=120,verbose_name="sgstper")
SGST = models.CharField(max_length=120,verbose_name="sgst")
IGSTPER = models.CharField(max_length=120,verbose_name="igstper")
IGST = models.CharField(max_length=120,verbose_name="igst")
NetAmt = models.CharField(max_length=120,verbose_name="netamt")
Я получаю список деталей продукта из шаблона. Поэтому после отправки запроса я получаю результат print(request.POST) следующим образом.
<QueryDict: {'csrfmiddlewaretoken': ['BKetQA2dIzgRlkLmIJGsZbWB3nzDiQxgR9FHnzN9lmDr86mdEJygUZJ08TORmU3N'], 'GrnNo': ['4'], 'Date': ['2022-03-20'], 'initial-Date': ['2022-03-20 06:09:47'], 'Supplier': ['2'], 'InvoiceNo': ['4444'], 'InvoiceDate': ['2022-03-20'], 'initial-InvoiceDate': ['2022-03-20 06:09:47'], 'productname': ['Safety shoes ','welder'], 'uom': ['0','0'], 'quantity': ['5','6'], 'unit': ['1','1'], 'rate': ['329','220'], 'value': ['1645','1320'], 'disper': ['2','2'], 'disvalue': ['32.9','20.2'], 'taxable': ['0','0'], 'cgstper': ['4','4'], 'cgstvalue': ['64.484','62.2'], 'sgstper': ['4','4'], 'sgstvalue': ['64.484','62.22'], 'igstper': ['4','4'], 'igstvalue': ['64.484','62.22'], 'netamt': ['1612.164.48464.48464.4840','1226.255242'], 'example_length': ['10']}>
Это моя функция purchaseView, где я делаю запрос и получаю ошибку, так как AddProduct, соответствующий запросу, не существует.
def PurchaseView(request):
stockinform = StockInForm()
product = AddProduct.objects.all()
unit = {}
unitobj = Unit.objects.all()
for obj in unitobj:
unit[obj.id]=f'{obj.Name}'
print(request.POST)
if request.method == 'POST':
grnno = request.POST.getlist('GrnNo')
date = request.POST.getlist('Date')
supplier = request.POST.getlist('Supplier')
supplierinstance = AddSupplier.objects.get(id=supplier[0])
invoiceno = request.POST.getlist('InvoiceNo')
invoicedate = request.POST.getlist('InvoiceDate')
productname = request.POST.getlist('productname')
uom = request.POST.getlist('uom'),
quantity = request.POST.getlist('quantity')
unitname = request.POST.getlist('unit')
rate = request.POST.getlist('rate')
value = request.POST.getlist('value')
disper = request.POST.getlist('disper')
disvalue = request.POST.getlist('disvalue')
taxable = request.POST.getlist('taxable')
cgstper = request.POST.getlist('cgstper')
cgstvalue = request.POST.getlist('cgstvalue')
sgstper = request.POST.getlist('sgstper')
sgstvalue = request.POST.getlist('sgstvalue')
igstper = request.POST.getlist('igstper')
igstvalue = request.POST.getlist('igstvalue')
netamt = request.POST.getlist('netamt')
productlen = len(productname)
for i in range(0,productlen):
unitinstance = Unit.objects.get(id=unitname[i])
print(productname[i])
productupdate = AddProduct.objects.get(Name=productname[i])
StockIN.objects.create(GrnNo=grnno[0],
Date=date[0],
Supplier=supplierinstance,
InvoiceNo=invoiceno[0],
InvoiceDate=invoicedate[0],
ProductName=productname[i],
Quantity=quantity[i],
Unit=unitinstance,
Rate=rate[i],
Value=value[i],
DisPer=disper[i],
DisValue=disvalue[i],
Taxable=taxable[i],
CGSTPER=cgstper[i],
CGST=cgstvalue[i],
SGSTPER=sgstper[i],
SGST=sgstvalue[i],
IGSTPER=igstper[i],
IGST=igstvalue[i],
NetAmt=netamt[i])
productupdate.OpnStock = 0
productupdate.ClosingStock = quantity[i]
productupdate.purchaseRate = rate[i]
productupdate.CGST = cgstper[i]
productupdate.SGST = sgstper[i]
productupdate.IGST = igstper[i]
productupdate.save()
return render(request, "stock/purchase.html",{"form":stockinform,"products":product,"unit":unit})
Когда я тестирую django shell, все работает нормально. Но после отправки формы в шаблоне это не работает. Я не знаю почему. Пожалуйста, помогите мне, брат
Поскольку вы запрашиваете модель внутри цикла, я бы предложил проверять значения в журнале или консоли, когда появляется ошибка. Также я бы предложил использовать StockIN.objects.bulk_create() вместо создания элементов в цикле