Here is My Views
from django.contrib import messages
from django.contrib.auth import authenticate
from django.contrib.auth.models import *
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import *
from .models import *
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
email = request.POST.get('username')
password = request.POST.get('password')
User._meta.get_field('email')._unique = True
# username verification
if User.objects.filter(username=username).exists():
user = auth.authenticate(username=username, password=password)
# Email Verification
elif User.objects.filter(email=email).exists():
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
# Forign key data collect from Phone model to User model
else:
messages.info(request, 'Enter valid username/email/Phone')
return render(request, 'login.html')
# authenticate
if user is not None:
auth.login(request, user)
return redirect('user_search')
else:
messages.info(request, 'incorrect password.')
return render(request, 'login.html')
else:
return render(request, 'login.html')
def logout(request):
auth.logout(request)
return redirect('login')
@login_required
def register(request):
if request.method == 'POST':
username = request.POST['username']
email = request.POST['email']
phone = request.POST['phone']
if Customer.objects.filter(c_phone=phone).exists():
messages.info(request, 'Phone number already registered')
return render(request, 'register.html')
else:
user = Customer.objects.create(c_name=username, c_email=email, c_phone=phone)
user.save()
return redirect('product_list', id=user.pk)
else:
return render(request, 'register.html')
@login_required
def product_list(request, id):
product = Products.objects.all()
customer = Customer.objects.get(pk=id)
form = CustomForm()
return render(request, 'product_list.html', {'product': product, 'customer': customer})
@login_required
def user_search(request):
if request.method == 'POST':
phone = request.POST['phone']
if Customer.objects.filter(c_phone=phone).exists():
user = Customer.objects.get(c_phone=phone)
print(user.pk)
return redirect('product_list', id=user.pk)
else:
return redirect('register')
else:
return render(request, "customer_search.html")
@login_required
def p_add(request, id, pid):
product = Products.objects.get(pk=pid)
user = Customer.objects.get(pk=id)
quantity = request.POST['number']
prize = quantity * product.p_prize
order = Order.objects.update_or_create(product=product, customer=user, total_prize=prize, quantity=quantity)
order.save()
return redirect('product_list', id=user.pk)
Here is My Template
{% extends "base.html" %}
{% load static %}
{% block content %}
<link rel="stylesheet" href="{% static "css/style.css"%}">
<div class="w-100">
<div class="d-flex justify-content-end"><a href="{% url 'logout' %}">logout</a></div>
</div>
{{ customer.c_id }}
{{ customer.c_name }}
<form action="" method="POST">
{% csrf_token %}
<table class="table">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">PRICE</th>
<th scope="col">QUANTITY</th>
<th scope="col">ADD</th>
</tr>
</thead>
<tbody>
{% for st in product %}
<tr>
<th scope="row">{{ st.p_id }}</th>
<td>{{ st.p_name }}</td>
<td>{{ st.p_prize }}</td>
<td><input type="number" class="form-control" name="number"></td>
<td><button type="Submit" class="btn btn-primary" name="Submit"><a class="text-white" href="{% url 'p_add' customer.pk st.pk %}">ADD</a></button></td>
</tr>
{% endfor %}
</tbody>
</table>
</form>
{% endblock %}
Here is My urls
from django.urls import path
from main_app import views
urlpatterns = [
path('product_list/<int:id>',views.product_list,name='product_list'),
path('login/',views.login,name='login'),
path('logout/', views.logout, name='logout'),
path('register/', views.register, name='register'),
path("delete/<int:id>/", views.p_delete, name='delete'),
path('Customer_search/',views.user_search,name='user_search'),
path('product_list/<int:id>/<int:pid>/',views.p_add,name='p_add'),
]
Here is My models
from django.db import models
from django.contrib.auth.models import *
class Products(models.Model):
p_id = models.AutoField(primary_key=True)
p_name = models.CharField(max_length=30, blank=False, null=False)
p_prize = models.IntegerField(null=False, blank=False)
p_date_time = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return self.p_name
class Customer(models.Model):
c_id = models.AutoField(primary_key=True)
c_name = models.CharField(max_length=30, blank=False, null=False)
c_email = models.EmailField(max_length=100, blank=False, null=False)
c_phone = models.CharField(max_length=12, blank=False, null=False)
c_date_time = models.DateTimeField(auto_now_add=True, auto_now=False)
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.c_name
class Order(models.Model):
o_id = models.AutoField(primary_key=True)
product = models.ForeignKey(Products, on_delete=models.CASCADE, blank=True, null=True)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, blank=True, null=True)
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
total_prize = models.IntegerField(blank=False, null=False)
quantity = models.IntegerField(blank=False, null=False,default=0)
o_date_time = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return self.o_id
I can access customer id and product id via url get .In login section i can get data via POST method.But here i cant access quantity given by user from front end to backend.In backend it say None when i store front end value in variable.I am a beginner.Please help me.