Menu
CoddyTech

デフォルト値と空のフィールド

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は長さに制限のないテキストで、レビューのような長文に使います。

challenge icon

チャレンジ

簡単

Bookの省略可能な項目を省略可能にしましょう。

  • is_readの初期値はFalseです。
  • finishedは空でもかまいません。未読了の本には日付がありません。
  • 長さに制限のない長文用のフィールドsummaryを追加します。空のままにでき、NULLではなく空のテキストとして保存されます。

「Run」を押してから、ShellタブでBook.objects.create(title="Emma", author="Jane Austen", year=1815, price="7.50")と入力します。エラーではなく、<Book: Book object (1)>と表示されます。

自分で試してみよう

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プレイグラウンド