1

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.

Snigdho
  • 11
  • 2
  • Your `number` input field is outside the form. I suspect that this variable will not be part of the form data and thus, you are not able to grab it from POST variables in your view. – Marco Jan 13 '21 at 17:01
  • Thanks..i put number field input inside my form..but still no change.cant get data. – Snigdho Jan 13 '21 at 19:06
  • Are you sure you have some data in your post request? You can check that with browser dev tools. – Marco Jan 13 '21 at 19:25
  • in back-end I got none as data.nothing else – Snigdho Jan 14 '21 at 05:53
  • I got this 500 internal server error on browser dev tool:Failed to get subsystem status for purpose – Snigdho Jan 14 '21 at 06:06
  • What is the form data you posting to the server? Please read https://stackoverflow.com/a/15603882/4151233 – Marco Jan 14 '21 at 08:53

0 Answers0