デフォルト値と空のフィールド
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 3/23。
読んだかどうかを指定せずに本を保存しようとすると、データベースは拒否します。NOT NULL constraint failed。そうでないと指定するまでは、すべてのフィールドが必須です。指定方法は次の3つです。
has_subtitles = models.BooleanField(default=True)
rating = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True)
tagline = models.CharField(max_length=200, blank=True)defaultは、新しい行に値を指定しなかった場合に設定される値です。null=Trueを指定すると、列にNULLを保存でき、PythonではNoneとして読み取られます。blank=Trueを指定すると、フォームや管理サイトでフィールドを空欄のままにできます。
わからないことがある数値や日付には、null=Trueとblank=Trueの両方が必要です。テキストにはblank=Trueだけが必要です。空のテキストは""として保存され、nullを指定すると空の状態が2種類できてしまいます。TextFieldは長さに制限のないテキストで、レビューのような長文に使います。
チャレンジ
簡単Bookの任意項目を省略可能にします。
is_readの初期値はFalseです。finishedは空でもかまいません。読み終えていない本には日付がありません。- 新しいフィールド
summaryを追加します。長文で、長さの制限はなく、空でもかまいません。テキストを扱うDjangoらしい方法です。
「Run」を押し、「Shell」タブでBook.objects.create(title="Emma", author="Jane Austen", year=1815, price="7.50")と入力して、「Data」タブを開きます。
自分で試してみよう
from django.db import models
class Book(models.Model):
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()
finished = models.DateField()
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド