ぶっちゃけ質問タイム。NOT NULL として定義された列を省略しても、Django モデルのオブジェクトを作成できるようで、その理由がわかりません。これが私のモデルです:
class Movie(models.Model):
name = models.CharField(max_length=256)
length_minutes = models.IntegerField()
rating = models.CharField(max_length=2)
class Meta:
db_table = 'movies'
python manage.py
SQLを実行すると、次のように表示されます。
BEGIN;
CREATE TABLE "movies" (
"id" serial NOT NULL PRIMARY KEY,
"name" varchar(256) NOT NULL,
"length_minutes" integer NOT NULL,
"rating" varchar(2) NOT NULL
);
COMMIT;
\d movies
また、からコマンドを実行するとpsql
、すべての列が に指定されていることがわかりますNOT NULL
。
しかし、ここで私が理解していないことがあります。Python シェルを実行すると、次のコマンドを発行できます。空の「名前」列を持つ新しい行が作成されます。
Movie.objects.create(length_minutes=120, rating='PG')
ただし、同等の SQL コマンド (と思われるもの) を発行すると、次のようになります。
INSERT INTO movies(length_minutes, rating) VALUES(120, 'PG');
...私が期待するエラーが表示されます:「エラー: null 値... null 以外の制約に違反しています。」
NOT NULL
Django の ORM を使用すると、 CharField 列のパラメーターを持たないオブジェクトを作成できるのはなぜですか? モデルバリデーターを使用していることを前提としていますか? もしそうなら、それはかなり愚かで信頼できるORMのようです.
Python 2.7.1、Django 1.4、および PostgreSQL 9.1.4 を使用しています。
ご協力いただきありがとうございます。