I am new in django.i am trying to make a invoice generator app with django . where an employee inputs the customer id and it takes to the invoice page.in the invoice page the employe can enter a product id and the product and customer info will be added to invoice model object .so i want to add all the products for the same invoice id or want to filter by customer id which will get all the invoices for the customer id here is the code models.py
from django.db import models
from account.models import Customer
from product.models import Product
class Invoice(models.Model):
products = models.ForeignKey(Product, on_delete=models.CASCADE, default=1)
customers = models.ForeignKey(Customer, on_delete=models.CASCADE, default=4)
date = models.DateTimeField(auto_now_add=True)
total = models.BigIntegerField(default=0)
quantity = models.IntegerField(default=0)
views.py
def billingform(request):
if request.method == "POST":
cid = request.POST["customerId"]
customer = Customer.objects.get(id=cid)
request.session['customerId'] = cid
return redirect('invoice')
return render(request, 'bform.html')
def invoice(request):
cid = request.session.get('customerId')
customer = Customer.objects.get(id=cid)
if request.method == "POST":
pd = request.POST["product_id"]
qt = int(request.POST["quantity"])
product = Product.objects.get(id=pd)
pd_price = int(product.selling_price)
total = pd_price*qt
pd_name = product.name
Invoice.objects.create(products = product,
quantity = qt, total=total, customers = customer)
cust_id = Invoice.objects.get(id, customers=customer.id)
product_name = cust_id.products
product_quantity = cust_id.quantity
product_total = cust_id.total
return render(request, 'invoice.html', { "total":product_total, "customer": customer,
"product_names": product_name,
"quantitys": product_quantity,})
else:
return render(request, 'invoice.html', {"customers": customer})
it shows the error TypeError: cannot unpack non-iterable builtin_function_or_method object
CodePudding user response:
Maybe the mistake in this line..
cust_id = Invoice.objects.get(id, customers=customer.id)
Change into
cust_id = Invoice.objects.get(id=customer.id, customers=customer.id)
And let me know if it is not working then show me your template file also..
CodePudding user response:
cust_id = Invoice.objects.get(id=customer.id) Get: fetches a single object and assign it to the variable. So this should correct your mistake