Django Add Members

Creating new database records

➕ Adding Records in Django

Django offers several methods to add new records to your database. You can create objects programmatically, use forms, or add through the admin interface. Each method automatically handles database insertion and validation.


# Create a new member
member = Member(firstname="John", lastname="Doe")
member.save()
                                    

Methods to Add Records

💾

Create & Save

Instantiate then save object

obj = Model()
obj.save()

objects.create()

Create and save in one step

Model.objects.create()
📝

Form Submission

Add via web forms

form.save()
🖥️

Admin Interface

Add through admin panel

# Click "Add" in admin

🔹 Create and Save Method

Create a model instance by instantiating the class with field values, then call save() to insert it into the database. This two-step process allows you to modify the object before saving if needed.

# views.py or Django shell
from .models import Member

# Create new member instance
member = Member()
member.firstname = "John"
member.lastname = "Doe"
member.email = "[email protected]"
member.phone = "123-456-7890"
member.joined_date = "2024-01-15"

# Save to database
member.save()

print(f"Added member: {member.firstname} {member.lastname}")

🔹 Using objects.create()

The create() method combines instantiation and saving in one step. This is the most concise way to add records and is preferred when you have all the data ready at once.

# views.py
from .models import Member

# Create and save in one step
member = Member.objects.create(
    firstname="Jane",
    lastname="Smith",
    email="[email protected]",
    phone="987-654-3210",
    joined_date="2024-01-20"
)

print(f"Created member with ID: {member.id}")

🔹 Add Multiple Records

Use bulk_create() to add multiple records efficiently with a single database query. This is much faster than creating records one by one when you need to insert many objects at once.

# views.py
from .models import Member

# Create list of member objects
members = [
    Member(firstname="Alice", lastname="Johnson", email="[email protected]"),
    Member(firstname="Bob", lastname="Williams", email="[email protected]"),
    Member(firstname="Carol", lastname="Brown", email="[email protected]"),
]

# Bulk create all at once
Member.objects.bulk_create(members)

print(f"Added {len(members)} members")

⚠️ Note:

bulk_create() does not call save() method or trigger signals. Use it for simple insertions only.

🔹 Add via Form View

Create a view that handles form submissions to add new records. This allows users to add data through your website, with Django handling validation and database insertion automatically through the form processing.

# views.py
from django.shortcuts import render, redirect
from .models import Member

def add_member(request):
    if request.method == 'POST':
        # Get data from form
        firstname = request.POST.get('firstname')
        lastname = request.POST.get('lastname')
        email = request.POST.get('email')
        phone = request.POST.get('phone')
        joined_date = request.POST.get('joined_date')
        
        # Create new member
        Member.objects.create(
            firstname=firstname,
            lastname=lastname,
            email=email,
            phone=phone,
            joined_date=joined_date
        )
        
        return redirect('member_list')
    
    return render(request, 'add_member.html')
<!-- add_member.html -->
<form method="post">
    {% csrf_token %}
    <input type="text" name="firstname" placeholder="First Name" required>
    <input type="text" name="lastname" placeholder="Last Name" required>
    <input type="email" name="email" placeholder="Email" required>
    <input type="text" name="phone" placeholder="Phone">
    <input type="date" name="joined_date" required>
    <button type="submit">Add Member</button>
</form>

🔹 Add with ModelForm

Use Django's ModelForm to automatically generate forms from your models. ModelForm handles validation, error messages, and saving, making it the recommended approach for adding records through web forms.

# forms.py
from django import forms
from .models import Member

class MemberForm(forms.ModelForm):
    class Meta:
        model = Member
        fields = ['firstname', 'lastname', 'email', 'phone', 'joined_date']
        widgets = {
            'joined_date': forms.DateInput(attrs={'type': 'date'}),
        }

# views.py
from django.shortcuts import render, redirect
from .forms import MemberForm

def add_member(request):
    if request.method == 'POST':
        form = MemberForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('member_list')
    else:
        form = MemberForm()
    
    return render(request, 'add_member.html', {'form': form})
<!-- add_member.html -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Add Member</button>
</form>

🔹 Add via Admin Interface

The Django admin provides a user-friendly interface to add records without writing code. Simply register your model, navigate to the admin panel, and click the "Add" button to create new records through a form.

# admin.py
from django.contrib import admin
from .models import Member

@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    list_display = ('firstname', 'lastname', 'email', 'joined_date')
    
# Now you can:
# 1. Go to http://127.0.0.1:8000/admin/
# 2. Click on "Members"
# 3. Click "Add Member" button
# 4. Fill in the form
# 5. Click "Save"

🧠 Test Your Knowledge

Which method creates and saves a record in one step?