Ограничения модели не работают с 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

вывод тестов enter image description here

проблема, как видно из вывода, заключается в том, что длина текста, сгенерированного и хранящегося в тестовой базе данных, превышает 5.

прошу вас помочь мне в этом вопросе.

Совет Иэна Шелвингтона использовать CharField является здесь главной проблемой. Это обеспечит соблюдение ограничений базы данных.

Django предлагает больше типов валидации, которые не могут быть принудительно применены базой данных. Они не будут проверяться при вызове model.save:

Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, то она будет запускать ваши валидаторы на всех полях, которые включены в вашу форму.

См. Как запускаются валидаторы.

Вернуться на верх