DEV Community

Samuel Lubliner
Samuel Lubliner

Posted on • Edited on

Django: Using models

From: MDN Web Docs

Models

  • Python objects
  • Define the data structure
  • Independent from the database schema
  • Facilitate communication between Django and the database via Object-Relational Mapper

Designing Models

Create separate models for every object. Models can also be used to represent selection-list options.

Consider the relationships between objects. Relationships include:

  • one to one (OneToOneField)
  • one to many (ForeignKey)
  • many to many (ManyToManyField)

Multiplicities define the maximum and minimum number of each model that may be present in the relationship.

Model definition

Models:

  • Defined in models.py
  • Extend django.db.models.Model class
  • Can include fields, methods and metadata

Fields

  • Fields in a model represent columns in a database table.
  • Each record (row) in the table contains values for these fields.
  • Field types are designated using specific classes that define the type of data stored.
  • Field types can also be used for HTML form validation.

Field Arguments

COMMON FIELD TYPES

Metadata

Methods

__str__()

  • Python class method
  • Provides a readable string representation of the object
  • The string represents individual records

get_absolute_url()

  • Generates a URL to view individual records of the model

Model management

Use model classes to create, update, or delete records, and to run queries.

Creating and modifying records

  • Create a record by instantiating the model and using the model's constructor.
  • Then call save() to save the object to the database.
  • Access fields in the record using dot notation.
  • Search for records using the model's objects attribute

The full list of lookups:

https://docs.djangoproject.com/en/5.0/ref/models/querysets/#field-lookups

Making queries:

https://docs.djangoproject.com/en/5.0/topics/db/queries/

Constraints

https://docs.djangoproject.com/en/5.0/ref/models/constraints/

Defining the LocalLibrary Models

At the top of /django-locallibrary-tutorial/catalog/models.py, the boilerplate imports the models module, which provides the models.Model base class that our models inherit from.

Genre model

  • Stores information about the book genre
  • A single CharField field is used to describe the genre
  • Limited to 200 characters
  • Has some help_text
  • Set tounique=True
  • One record for each genre
  • a __str__() method returns the name of the genre
  • get_absolute_url() method used to access a detail record

Book model

  • Represents all the general information about an available book
  • CharField is used for the book's title and isbn.
  • unique as true ensures all books have a unique ISBN
  • title is not set to be unique, because it is possible for different books to have the same name.
  • TextField for longer summary
  • ManyToManyField a book can have multiple genres and a genre can have many books

In both field types:

  • The first unnamed parameter should specify the related model class
    • either directly by the model class
    • or as a string with the name of the related model
  • If the associated class is not yet defined, use the model's name as a string in this file
  • Setting null=True permits the database to store Null if no author is selected
  • Using on_delete=models.RESTRICT prevents the deletion of the book's author if it is referenced by any book

Warning:

  • The default behavior is on_delete=models.CASCADE
  • This means that if the author is deleted, the book would also be deleted
  • Use RESTRICT or PROTECT to avoid the author being deleted while it is referenced by any book
  • Alternatively, use SET_NULL to set the book's author to Null if the author record is deleted
  • The __str__() method represents a Book record by its title field
  • The get_absolute_url() method provides a URL to access a detailed record

BookInstance model

  • Represents a specific copy of a book
  • Includes information about whether the copy is available
  • The date expected back
  • version details
  • unique id for the book in the library
  • ForeignKey identifies the associated Book
    • each book can have many copies
    • a copy can only have one Book
  • on_delete=models.RESTRICT ensures the Book cannot be deleted while referenced by a BookInstance
  • CharField represents the specific release
  • UUIDField for the id field to set it as the primary_key
  • This allocates a globally unique value for each instance
  • DateField for the due_back date
  • status CharField defines a choice/selection list
  • str() uses a combination of its unique id and title

Re-run the database migrations

After models have now been created, re-run database migrations to add them to the database.

python3 manage.py makemigrations
python3 manage.py migrate
Enter fullscreen mode Exit fullscreen mode

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay