This is a demo. Everything you do here is erased every 2 hours. Next reset in .
Free and open source · For Django 4.2+

Add appointment booking to your Django site.

Clients book online, your team manages its calendar, and you stay in control. This site runs it for real, so go ahead and try it.

$ pip install django-appointment
Clients book without creating an account A calendar for your staff, a dashboard for admins Available in English, French and Spanish
Try it

Pick a role and try it for real

Everything here is the real package. Only the names are made up.

Client

Book an appointment like a real client. No sign-up needed.
  • See the services
  • Book a paid service
  • Book a free service
  • Pick another person

Staff member

Log in as Samantha and manage her own schedule.
  • Open your calendar
  • Move an appointment
  • See your profile
  • Take a day off

Administrator

Log in as Jack and manage everyone and everything.
  • See everyone's calendar
  • Manage the services
  • Create a service
  • Manage the team
How booking works

From picking a service to a confirmed booking

Your site shows the services. The package handles the rest.

Pick a service

Each service has its own booking link. Put it anywhere on your site.

Pick a person, day and time

Only free times are shown. Days off, weekends and breaks are left out.

Add details and pay

The client adds their contact details. Paid services can take the full price or a deposit.

Get the confirmation

The client and your team get an email. The client can reschedule from it.

What you get

Everything you need to take bookings

Change settings in one place, and swap any page or email for your own design.

Real availability

Clients can only book times when someone is actually working.

New in 3.11

Block part of a day

Block a lunch break or a meeting. The rest of the day stays open.

3.10+

No overlapping bookings

A 2-hour service takes 2 hours, and you can add a break between bookings.

Drag-and-drop calendar

Staff move appointments by dragging them, and add new ones in a click.

Clients can reschedule

A link in the email lets clients pick a new time, as many times as you allow.

Emails and reminders

Confirmations for everyone, and a reminder the day before.

No passwords for clients

An account is made on the first booking. Returning clients confirm their email with a code.

Payments and deposits

Send clients to your own payment page, for the full price or a deposit.

3.10+

Use your own design

Replace any page or email with your own template. No need to fork the package.

Three languages

English, French and Spanish. Dates, times and prices follow the visitor's language.

Staff and admin roles

Staff only see their own schedule. Admins manage the team and the services.

Cleans up after itself

Unfinished bookings are removed every day. Real appointments are kept.

This demo uses its own design, and so can you

The booking pages, the dashboard and the emails all come from the package. The package lets you swap its templates for your own, so this demo did that to match the rest of the site. Do the same on your site, so booking feels like part of it.

For developers

Set up in a few minutes

Install it, add a few settings and one line to your URLs, then run migrations. Add a service and a staff member, and you can take bookings.

Read the setup guide See the code
settings.py · urls.py
# settings.py
INSTALLED_APPS = [..., "appointment", "django_q"]
APPOINTMENT_BASE_TEMPLATE = "base.html"
APPOINTMENT_WEBSITE_NAME = "My Studio"

# urls.py
urlpatterns = [
    ...,
    path("appointment/", include("appointment.urls")),
]
FAQ

Questions people ask

Will I get real emails if I book here?
Yes, the same emails your clients would get. Use an address you can check, or a throwaway one.
Why does my data disappear?
This is a demo, not a real booking site, so nothing you do here is kept. Every 2 hours the whole site goes back to the same sample data, so each visitor starts fresh. Your bookings, changes and email address are erased then, and no booking made here is a real appointment.

Next reset in

Can I use my own design?
Yes, and we suggest you do. The pages use your site's own base template, and you can replace any page or email with your own. This demo does it: the pages and emails you see here are its own templates. How to do it
Does it work with a custom user model?
Yes. It uses whatever user model your project is set up with.
Do I need Django Q?
Only for reminders, sending emails in the background and the daily cleanup. Everything else works without it.
How can I help?
Report bugs, suggest features, help translate (Spanish needs someone!) or send a pull request on GitHub.

Like it? Add it to your project.

It's free and open source. A star on GitHub helps others find it.