A short snippet that will delete records from the database. The deletion will occur when you visit the delete_id/somenumber/ url (defined inside urls.py), which will trigger the delete_view function (also defined inside urls.py), delete the record from the database (forms.py) and redirect to the /redirect-url/ (defined inside views.py).

Add an url: urls.py

url(r'^delete_id/(?P<id_to_delete>d+)$', 'delete_view'),

Create a view that will delete the record: views.py

def delete_view(request, id_to_delete):
    return HttpResponseRedirect("/redirect-url/")


This code will generate a Form based on an already existing Model. In Django this is called ModelForm and is a useful feature if you want to quickly create a form that saves data into a database.

Create a model (database table): models.py

from django.db import models
class Regions(models.Model):
    region = models.CharField(max_length=50)
    def __unicode__(self):
        return self.region

Create a form from the model (ModelForm): forms.py

from ApplicationName.models import Regions
class AddRegionForm(forms.ModelForm):
    class Meta:
        model = Regions

Create a view that will use the form and model: views.py

def add_region(request):
    # if the form is submitted save the new item
    if request.method == 'POST':
        form = AddRegionForm(request.POST)
        if form.is_valid():
            # either you define the fields
            region = Regions(region=form.cleaned_data['region'])
            # or you just save the whole form
            region = form.save()
    # fetch all the regions from the table, ordered by name asc
    regions = Regions.objects.order_by('region')
    context = ({ 'regions': regions })
    # render the template
    return render(request, 'applicationname/regions.html', context)


If you are going to use the auth module that Django provides, you will most likely want to let your users add additional information about them. In Django you do this by extending the Profile model and activating it in the settings file.

Extend the Profile model: models.py

from django.contrib.auth.models import User
class Profile(models.Model):
    user       = models.ForeignKey(User, unique=True)
    address    = models.CharField(max_length=150)
    city       = models.ForeignKey(Cities)
    telephone  = models.CharField(max_length=100)
    birthday   = models.DateField()

Edit the Settings file: settings.py

AUTH_PROFILE_MODULE = "ApplicationName.Profile"

Add your new Views: views.py

user_profile = request.user.get_profile()
    address = user_profile.address

Create a Template: profile.html

{{ user.get_profile.address }}
# if this doesn't work try 
# user.get_profile().address or 
# request.user.get_profile.address or
# request.user.get_profile().address


You are going to need this in case you want to allow users creating an account to input more than just their username and password.

Import everything you need: forms.py

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

And your class that uses the UserCreationForm class (still in forms.py)

class RegisterForm(UserCreationForm):
    # declare the fields you will show
    username = forms.CharField(label="Your Username")
    # first password field
    password1 = forms.CharField(label="Your Password")
    # confirm password field
    password2 = forms.CharField(label="Repeat Your Password")
    email = forms.EmailField(label = "Email Address")
    first_name = forms.CharField(label = "Name")
    last_name = forms.CharField(label = "Surname")

    # this sets the order of the fields
    class Meta:
        model = User
        fields = ("first_name", "last_name", "email", "username", "password1", "password2", )

    # this redefines the save function to include the fields you added
    def save(self, commit=True):
        user = super(UserCreateForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        user.first_name = self.cleaned_data["first_name"]
        user.last_name = self.cleaned_data["last_name"]

    if commit:
        return user