Need help with django-admin-cookbook?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

211 Stars 48 Forks Other 147 Commits 9 Opened issues

Services available


Need anything else?

Contributors list

Django admin cookbook

Django admin cookbook is a set of recipes of how to do things with Django. They take the form of about 50 questions of the form

How to do X with Django admin

We have a set of models which we use across the book for answering these questions.

The setup

You have been hired by the United Mytic and Supernormal Research Agency - The UMSRA. UMSRA researches and documents mytic and supernormal events. You have been tasked with creating a web app where UMSRA researchers can document their findings and look up their collegue's research.

The models

You plan to write a set of models and an associated admin for UMSRA researchers. You come up with two apps

. The models are


from django.db import models
from entities.models import Hero, Villain

class Epic(models.Model): name = models.CharField(max_length=255) participating_heroes = models.ManyToManyField(Hero) participating_villains = models.ManyToManyField(Villain)

class Event(models.Model): epic = models.ForeignKey(Epic, on_delete=models.CASCADE) details = models.TextField() years_ago = models.PositiveIntegerField()

class EventHero(models.Model): event = models.ForeignKey(Event, on_delete=models.CASCADE) hero = models.ForeignKey(Hero, on_delete=models.CASCADE) is_primary = models.BooleanField()

class EventVillain(models.Model): event = models.ForeignKey(Event, on_delete=models.CASCADE) hero = models.ForeignKey(Villain, on_delete=models.CASCADE) is_primary = models.BooleanField()


from django.db import models

class Category(models.Model): name = models.CharField(max_length=100)

class Origin(models.Model): name = models.CharField(max_length=100)

class Entity(models.Model): GENDER_MALE = "Male" GENDER_FEMALE = "Female" GENDER_OTHERS = "Others/Unknown"

name = models.CharField(max_length=100)
alternative_name = models.CharField(
    max_length=100, null=True, blank=True

category = models.ForeignKey(Category, on_delete=models.CASCADE)
origin = models.ForeignKey(Origin, on_delete=models.CASCADE)
gender = models.CharField(
description = models.TextField()

class Meta:
    abstract = True

class Hero(Entity):

is_immortal = models.BooleanField(default=True)

benevolence_factor = models.PositiveSmallIntegerField(
    help_text="How benevolent this hero is?"
arbitrariness_factor = models.PositiveSmallIntegerField(
    help_text="How arbitrary this hero is?"
# relationships
father = models.ForeignKey(
    "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL
mother = models.ForeignKey(
    "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL
spouse = models.ForeignKey(
    "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL

class Villain(Entity): is_immortal = models.BooleanField(default=False)

malevolence_factor = models.PositiveSmallIntegerField(
    help_text="How malevolent this villain is?"
power_factor = models.PositiveSmallIntegerField(
    help_text="How powerful this villain is?"
is_unique = models.BooleanField(default=True)
count = models.PositiveSmallIntegerField(default=1)

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.