Я работаю над Django веб-приложением (с базой данных Postgres), которое содержит модель со следующим полем:
Loan(models.Model):
(...)
active = models.BooleanField(default=True)
print_code = models.CharField(
max_length=100,
blank=True,
null=True,
unique=True,
)
(...)
Однако наше приложение в настоящее время вызывает ошибки Sentry на следующий фрагмент кода:
loan, created = Loan.objects.get_or_create(
print_code=data['print_code']
)
Вызывает следующую ошибку:
null value in column "active" violates not-null constraint
DETAIL: Failing row contains (null, null, null, null, print1722, f, null)
В трассировке также содержится ошибка Loan.DoesNotExist
, поэтому я знаю, Django пытается создать новый экземпляр Loan
- без указания значения для поля active
, но, как видно из приведенного выше кода, он имеет значение по умолчанию.
Проблема в том, что до сих пор я не смог воспроизвести проблему локально, и у нас нет доступа оболочки к коду, который выполняется вживую. Все юнит-тесты также проходят без проблем, даже когда я явно создал несколько тестов для создания Loan
объектов без поля active
.
# Does not fail.
def test_null_value_on_active_field(self):
test_object, created = Loan.objects.get_or_create(print_code='test')
self.assertEqual(True, test_object.active)
self.assertEqual(True, created)
Во всех моих попытках код работал как ожидалось и заполнял поле со значением по умолчанию True
. И все же ошибка продолжает возникать, поэтому я должен что-то упустить.
Кто-нибудь знает, что мне не хватает?