Ограничения модели не работают с Faker (Django)
Я только начинаю использовать pytest и faker для тестирования
при попытке создать текст для поля в тестовой базе данных ограничения игнорируются и я не знаю, как это исправить.
models.py
from django.db import models
# Create your models here.
class Note(models.Model):
body = models.TextField(null=True, blank=True, max_length=5)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.body[0:50]
factories.py
import factory
from faker import Faker
fake = Faker()
from mynotes_api.models import Note
class NoteFactory(factory.django.DjangoModelFactory):
class Meta:
model = Note
body = fake.text()
conftest.py
import pytest
from django.contrib.auth.models import User
from pytest_factoryboy import register
from tests.factories import NoteFactory
register(NoteFactory)
@pytest.fixture
def new_user1(db, note_factory):
note = note_factory.create()
return note
test_ex1.py
import pytest
def test_product(new_user1):
note = new_user1
print(note.body)
assert True
проблема, как видно из вывода, заключается в том, что длина текста, сгенерированного и хранящегося в тестовой базе данных, превышает 5.
прошу вас помочь мне в этом вопросе.
Совет Иэна Шелвингтона использовать CharField является здесь главной проблемой. Это обеспечит соблюдение ограничений базы данных.
Django предлагает больше типов валидации, которые не могут быть принудительно применены базой данных. Они не будут проверяться при вызове model.save
:
Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, то она будет запускать ваши валидаторы на всех полях, которые включены в вашу форму.