The problem was not NULL but blank fields.  blank=False is actually the default, but Django doesn't create any DB constraints to enforce that, nor do model objects get validated much in normal processing. Django leaves that to forms, which we don't usually use when creating objects in tests.

Nevertheless, my tests are working now, I might as well take this check out again.  Will update shortly.