0

I am want to: 1. save data from a HTML form to MySQL 2. delete data from mySQL which is entered through HTML form.

The save functionality is working. While there is error in delete functionality.

Model.py

from django.db import models

# Create your models here.
class info_needed(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=200)
    surname = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

    def __str__(self):
        return self.name

views.py

# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse

from .models import info_needed

def index(request):
    return render(request,'userdata/index.html')

def message(request):
    if request.method == 'POST':
        fname = request.POST.get("fname")
        lname = request.POST.get("lname")
        mail = request.POST.get("mail")
        action = request.POST.get("submit_button")
        action1 = request.POST.get("delete_button")
        p = info_needed(name = fname , surname = lname, email = mail)
        print("name", fname)
        print("action", action)
        print("action2", action1)
        if action == "Submit":
            p.save()
        elif action1 == "Delete":

            p.delete()
        else:
            return HttpResponse("Wrong Action Provided")

    return(HttpResponse("Thank you for submitting your details"))

urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('',views.index, name = 'index'),
    path('submit/', views.message, name = 'submit'),
]

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Page</title>
</head>
<body>
<form action="{% url 'submit' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
  <label for="fname">Name:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">Surname:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <label for="mail">E-Mail:</label>
  <input type="text" id="mail" name="mail"><br><br>
    <label for="submit_button">Save</label>
    <input type="radio"  name="submit_button" id="submit_button" value="Submit">
    <label for="delete_button">Delete</label>
  <input type="radio" name="delete_button" id="delete_button" value="Delete">
    <input type="submit", value="Submit">
</form>
</body>
</html>

Error while deleting:

AssertionError at /userdata/submit/
info_needed object can't be deleted because its id attribute is set to None.

The primary id is automoatically genenrated, how to delete the row entry in mysql where the name, surname, and email matches?

tolearntoseek
  • 55
  • 1
  • 5

1 Answers1

0

Delete this line

id = models.IntegerField(primary_key=True)

you don't need it ... django will make it automatically

-- UPDATE

OK, i get this you shouldn't make id like this <input type="text" id="fname" name="fname"><br><br> So i suggest to follow the docs here : docs then make this code into your form and it will work

class DeletableModelForm(forms.ModelForm):
    """
    Model form that allows you to delete the object
    """
    delete = forms.BooleanField(
        initial=False,
        help_text=_('Check this to delete this object')
    )

    def save(self, commit=True):
        if self.cleaned_data['delete']:
            return self.instance.delete()
        return super(DeletableModelForm, self).save()
  • I added that later on to check if something changes. The delete functionality does not work even after removing the line. – tolearntoseek Apr 30 '20 at 12:16