unique=True
やblank=False
などの制約を持ついくつかのモデルを書いていますnull=False
。鼻のあるモデルのテストを書こうとしています。ただし、次のようなテストを書くと:
from job_sites.models import Site, SiteType
@raises(IntegrityError)
def test_empty_site():
s = Site()
s.save()
@raises(IntegrityError)
def test_empty_site_type():
st = SiteType()
st.save()
DatabaseError: current transaction is aborted, commands ignored until end of transaction block
最初のテストを実行した後、次のような DatabaseError が発生し
ます。
エラーが予想される場合に DJango モデル テストを実行する正しい方法は何ですか?
参考までに、モデルは次のようになります。
class SiteType(models.Model):
site_type_id = models.AutoField(primary_key=True)
site_type = models.CharField(max_length=32, unique=True, blank=False, null=False, default=None)
site_type_abbrev = models.CharField(max_length=32, blank=True)
class Meta:
db_table = u'site_types'
class Site(models.Model):
site_id = models.AutoField(primary_key=True, blank=False, null=False, db_index=True)
site_name = models.CharField(max_length=128, blank=False, null=False, db_index=True)
site_type = models.ForeignKey(SiteType, blank=True, null=True)
date_entered = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = u'sites'
私の制約とデフォルトは次のようになります。
ALTER TABLE site_types ADD CONSTRAINT site_types_site_type_name_minlen CHECK (char_length(site_type) > 0);
ALTER TABLE sites ALTER COLUMN date_entered SET DEFAULT now();
ALTER TABLE sites ADD CONSTRAINT sites_site_name_minlen CHECK (char_length(site_name) > 0);