いいえ。
少なくとも、私が行ったテストに基づくものではありません。
models.py:
class Recipient(models.Model):
mailing = models.ForeignKey(Mailing, related_name="recipients")
email = models.EmailField()
how_sent = models.CharField(max_length=1, choices=SENT_TYPES, default="U")
user = models.ForeignKey(User, blank=True, null=True)
date_sent = models.DateTimeField(auto_now_add=True)
date_viewed = models.DateTimeField(null=True, blank=True)
def __unicode__(self):
return "%s -> %s (%s)" % (self.mailing, self.email, self.date_sent)
そして、私はこのコードをランドします:
>>> cursor.execute("""insert into mailings_recipient (mailing_id, email) values (3, 'test@example.org');""")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "path/to/django/db/backends/util.py", line 40, in execute
return self.cursor.execute(sql, params)
File "/path/to/django-pyodbc/sql_server/pyodbc/base.py", line 326, in execute
return self.cursor.execute(sql, params)
IntegrityError: ('23000', "[23000] [FreeTDS][SQL Server]Cannot insert the value NULL into column 'how_sent', table 'database.dbo.mailings_recipient'; column does not allow nulls. INSERT fails. (515) (SQLExecDirectW)")
Djangoがデフォルト値を入力した場合、「U」の値が送信されますhow_sent
が、代わりにエラーが発生します。
次に、Djangoを使用してレコードを作成すると、
Recipient.objects.create(mailing=Mailing.objects.all()[0], email='test@example.org')
これは対応するSQLです。
SET NOCOUNT ON INSERT INTO [mailings_recipient] ([mailing_id], [email], [how_sent], [user_id], [date_sent], [date_viewed]) VALUES (1, test@example.org, U, None, 2012-09-14 14:48:59, None)
;SELECT SCOPE_IDENTITY()
したがって、次のようなものを使用した場合にデフォルト値を入力するかどうかを本当に尋ねている場合cursor.execute("INSERT INTO...")
、答えは「いいえ」です。これらのデフォルト値は設定されません。ご指摘のとおり、Djangoはデータベーススキーマの作成時にデフォルト値を設定するのではなく、通常の保存を実行するときにこれらのデフォルト値を設定するだけです。