Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

NOT NULL constraint failed: posts_subscribe.firstname

I am trying to retrieve data from a form using the Post method and store it in the database. However, when I click on the submit button, I keep on getting the following error:

NOT NULL constraint failed: posts_subscribe.firstname

Here is my views.py

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

def subscribe(request):
    if request.method == 'POST':
        firstname=request.POST.get('firstname')
        secondname=request.POST.get('secondname')
        email=request.POST.get('email')
        phonenumber=request.POST.get('phonenumber')
        en= Subscribe(firstname=firstname, secondname=secondname, email = email, phonenumber = phonenumber)
        en.save()

        return redirect('/')
        
    return render(request, 'subscribe.html')

My models.py

class Subscribe(models.Model):
    firstname = models.CharField(max_length=30, blank = True)
    secondname = models.CharField(max_length=30, blank = True)
    email = models.CharField(max_length=30)
    phonenumber = models.IntegerField()

Here is my template

{% extends 'index.html' %}
{% block subscribe %}
<div class="card mx-5">
    <h1 class="mx-5 mt-3"> Subscribe</h1>
    <form method="POST" enctype="multipart/form-data" action="subscribe">
        {% csrf_token %}
        <div class="mb-3 mx-5">
            <label for="firstname" class="form-label ">First Name</label>
            <input type="text" class="form-control form-control-lg" id="firstname" placeholder="firstname">
        </div>
        <div class="mb-3 mx-5">
            <label for="secondname" class="form-label">Second Name (Optional)</label>
            <input type="text" class="form-control form-control-lg" id="secondname" placeholder="secondname">
        </div>
        <div class="mb-3 mx-5">
            <label for="email" class="form-label">Email</label>
            <input type="email" class="form-control form-control-lg" id="email" placeholder="example@example.com">
        </div>
        <div class="mb-3 mx-5">
            <label for="phonenumber" class="form-label">Phonenumber</label>
            <input type="number" class="form-control form-control-lg" id="phonenumber" placeholder="0712345678">
        </div>
        <div class="mb-3 mx-5">
            <button type="submit" class="btn-primary"> Subscribe</button>
        </div>     
    </form>
</div>
{% endblock %}

And my url patterns


urlpatterns= [
    path('', views.index, name='index'),
     
    path('subscribe', views.subscribe, name ='subscribe'),
    path('allposts', views.allposts, name='allposts'),
    path('political', views.political, name='political'),
    path('religion', views.religion, name='religion'),
    path('trending', views.trending, name='treniding'),
   
    path('<str:pk>', views.post, name='post'),
 
   
]

Any help would be much appreciated

>Solution :

You should add a name="…" attribute [mdn] to the <input> elements, so:

<input type="text" name="firstname" class="form-control form-control-lg" id="firstname" placeholder="firstname">
…
<input type="text" name="secondname" class="form-control form-control-lg" id="secondname" placeholder="secondname">
…
<input type="email" name="email" class="form-control form-control-lg" id="email" placeholder="example@example.com">
…
<input type="number" name="phonenumber" class="form-control form-control-lg" id="phonenumber" placeholder="0712345678">
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading