Shaurya Rajput
Shaurya Rajput

Reputation: 9

I'm facing issues in sql fetch data in django ? It returns None

This is test.py

from django.http import HttpResponse
import mysql.connector


MySQLdb = mysql.connector

host = 'xxxxxx'
username = 'xxxx'
db = 'xxxx'
port = '3306'
password = 'xxxxxx'


class sql:
    def __int__(self):
        pass

    def mysql_connection(self):
        try:
            mysql_conn = mysql.connector.connect(host=host, user=username,
                                                 database=db, password=password,
                                                 port=port, ssl_disabled=True)
            print("Connection Successfully Established...")
            return mysql_conn

        except Exception as e:
            print("mysql connection error".format(e))
            exit(0)

    def update_approval(self, que):
        d = self.mysql_connection()
        cursor = d.cursor()
        cursor.execute(que)
        result = cursor.fetchone()

        return result


This is my views.py

from django.shortcuts import render, redirect
from .forms import InputForm, TestForm
from django.core.mail import send_mail

from .test import sql
import mysql.connector

MySQLdb = mysql.connector



def index(request):
    if request.method == "POST":
        form = InputForm(request.POST)

        # ids = form["git_Id"].value()
        # print(ids)
        # query = f'SELECT request_id FROM request_form_mymodel where git_Id={ids};'
        #
        # p = obj.update_approval(query)

        obj = sql()
        # git_id = 5666
        ids = form.data["git_Id"]
        print(ids)
        # query = "SELECT request_id FROM request_form_db.request_form_mymodel where git_Id='%s'" % ids
        q = "SELECT request_id FROM request_form_db.request_form_mymodel where git_Id={}".format(ids)

        p = obj.update_approval(q)

        print(p)
        approve_url = f"http://my_url_path/test?request_id={p}"

        if form.is_valid():
            send_mail(
                'KSA Test Activation',
                approve_url,
                'my_sender_email_id',
                ['receiver_id'],
                fail_silently=False,
            )
            form.save()

            form = InputForm()
    else:
        form = InputForm()
    return render(request, 'home.html', {'form': form})

This is forms.py `

from django import forms
from .models import MyModel, TestModel


class InputForm(forms.ModelForm):
    class Meta:
        model = MyModel

        fields = ["git_Id", "git_Response"]

This is models.py

from django.db import models
import uuid


# Create your models here.
class MyModel(models.Model):
    git_Id = models.CharField(max_length=200)
    git_Response = models.CharField(max_length=200)
    is_approved = models.IntegerField()
    request_id = models.UUIDField(primary_key=False,
                                  default=uuid.uuid4,
                                  editable=False,
                                  unique=True)

Here i got output on email link : http://path_of_my_url/test/?request_id=None

the request_id stored in database by generating UUID. But i am facing issue to getting request id in url .it always returns none on url. But when i run test.py by creating object on sql class and run function that is return perfectly. please help me out in this issue.

Upvotes: 1

Views: 112

Answers (1)

Sunderam Dubey
Sunderam Dubey

Reputation: 8837

Use form.cleaned_data["git_Id"] after calling form.is_valid() so:

def index(request):
    if request.method == "POST":
        form = InputForm(request.POST)

        if form.is_valid():
            obj = sql()
        # git_id = 5666
            ids = form.cleaned_data["git_Id"]
            print(ids)
            # query = "SELECT request_id FROM request_form_db.request_form_mymodel where git_Id='%s'" % ids
            q = "SELECT request_id FROM request_form_db.request_form_mymodel where git_Id={}".format(ids)

            p = obj.update_approval(q)

            print(p)
            approve_url = f"http://my_url_path/test?request_id={p}"
            send_mail(
                'KSA Test Activation',
                approve_url,
                'my_sender_email_id',
                ['receiver_id'],
                fail_silently=False,
            )
            form.save()
            return redirect("some_view_name_to_redirect")

    else:
        form = InputForm()
    return render(request, 'home.html', {'form': form})

According to docs:

you should always return an HttpResponseRedirect after successfully dealing with POST data. This tip isn’t specific to Django; it’s good web development practice in general.

Upvotes: 0

Related Questions