Default Order
Part of the Models and the Admin section of Coddy's Django journey. Lesson 6 of 23.
Your books come back in no promised order: whatever the database gives. A model can set the order once, for every query that does not ask for another. Options for the whole model, rather than one field, go in an inner class named Meta:
class Movie(models.Model):
...
class Meta:
ordering = ["-released", "title"]ordering is a list of field names. A name alone sorts from low to high, A to Z for text; a minus in front sorts the other way, so this lists the newest films first. The second name breaks ties: films out on the same day come A to Z.
Challenge
Easy- Make books come back in title order, A to Z, whenever no order is asked for.
Press Run and open the Data tab: the four books are listed A to Z. Book.objects.all() in the Shell tab shows the same order.
Try it yourself
from django.db import models
class Book(models.Model):
class Genre(models.TextChoices):
FICTION = "fiction", "Fiction"
SCIFI = "scifi", "Science fiction"
MYSTERY = "mystery", "Mystery"
HISTORY = "history", "History"
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
year = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
is_read = models.BooleanField(default=False)
finished = models.DateField(null=True, blank=True)
summary = models.TextField(blank=True)
genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)
def __str__(self):
return f"{self.title} by {self.author}"
This lesson includes a short quiz. Start the lesson to answer it and track your progress.
All lessons in Models and the Admin
1Your First Model
Your First ModelField Types2Querying with the ORM
Creating RowsAll and GetFilter and LookupsCounting RowsSorting RowsUpdate and DeletePractice on your own: Django playground