Jaydeep Borkar
Jaydeep Borkar

Reputation: 79

How to add Checkboxes in Django Form.

I want to add checkboxes in my Django form for different NGOs(say NGO1, NGO2, and so on...). I want the user to select those checkboxes and that data should be saved in the database.

Please, Suggest me the necessary changes in the code. I'm using Django 1.9.

models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfileInfo(models.Model):

    user=models.OneToOneField(User)

    def __str__(self):
            return self.user.first_name
            return self.user.last_name
            return self.user.email

forms.py

from django import forms
from django.contrib.auth.models import User
from volunteer.models import UserProfileInfo

class UserForm(forms.ModelForm):

class Meta():
    model = User
    fields = ('email','first_name','last_name','username')

views.py

from django.shortcuts import render
from volunteer.forms import UserForm



def register(request):

registered = False

if request.method =="POST" :
    user_form = UserForm(data=request.POST)

    if user_form.is_valid():

        user = user_form.save()
        user.save()

        registered = True

    else:
        print(user_form.errors)

else:
    user_form = UserForm()

return render(request, 'volunteer/volunteer.html',
                         {'user_form':user_form,
                          'registered':registered})

admin.py

from django.contrib import admin
from volunteer.models import UserProfileInfo

# Register your models here.
admin.site.register(UserProfileInfo)

urls.py

from django.conf.urls import url

from . import views

app_name = 'volunteer'

urlpatterns = [

 url(r'^', views.register, name='register'),
]

volunteer.html(which has the form)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">


<meta name="viewport" content = "width=device-width, initial-scale=1.0">


</head>      

<body>   

 <div class="jumbotron">
    {% if registered %}
       <p>Thank you  <p>

    {% else %}
      <h1>Register yourself for Volunteering</h1>




 <form method="post">
    {% csrf_token %}
    {{ user_form.as_p }}
 <input type="submit" name="" value="Register as a Volunteer">

 {% endif %}

 </div> 


 </form>

</body>
</html> 

NOTE - I haven't included bootstrap, ajax and JQuery libraries in the above html code due to the formatting issues, I think it has nothing to do with the problem, so.

Thanks in advance!

Upvotes: 0

Views: 11860

Answers (1)

not2acoder
not2acoder

Reputation: 1152

You can easily achieve that using checkbox widget in django forms.

Define your form class as :

NGO_CHOICES = (
('one', 'ONE'),
('two', 'TWO'),
('three', 'THREE'),)

class UserForm(forms.ModelForm):
    ngo = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                      choices=NGO_CHOICES)

    class Meta():
        model = User
        fields = ('ngo', 'email','first_name','last_name','username')

Now while saving the data, you can access the data of checkbox in

if request.method =="POST" :
    user_form = UserForm(data=request.POST)

    if user_form.is_valid():
        # getting the list of ngos
        ngo = user_form.cleaned_data['ngo']
        user = user_form.save()
        user.save()

        registered = True

    else:
        print(user_form.errors)

else:
    user_form = UserForm()

Hope it helps.

Upvotes: 2

Related Questions