models.pyfrom django.db import models
class PropertyModel(models.Model):
name = models.TextField()
class Entity(models.Model):
name = models.TextField
property = models.ForeignKey(PropertyModel, models.PROTECT)
apps.pyfrom django.apps import AppConfig
class MyAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'my_app'
def ready(self):
from .models import PropertyModel
# from .constant import CONST1, CONST2
CONST1, CONST2 = "text1", "text2"
PropertyModel.objects.get_or_create(name=CONST1)
PropertyModel.objects.get_or_create(name=CONST2)
utils.pyfrom .models import Entity, PropertyModel
# from .constant import CONST1, CONST2
CONST1, CONST2 = "text1", "text2"
class BuisnessLogicProvider:
CONST1_MODEL = PropertyModel.objects.get(name=CONST1)
CONST2_MODEL = PropertyModel.objects.get(name=CONST2)
def some_logic(self, name: str) -> Entity:
instance = Entity.objects.create(name=name, property=self.CONST1_MODEL)
return instance
При написании теста для такой функциональности возникают трудности. Так как джанго постоянно очищает тестовую базу, код тестов будет падать ошибкой, мол такого первичного ключа в ссылаемой таблице нет при создании сущности Entity. Как можно решить эту проблему? Я понимаю, что это, вероятнее всего архитектурная ошибка, но PropertyModel в любом случае должны быть именно строками в БД, а не просто строковыми константами, определенными в коде как возможный выбор. Других ограничений нет.
tests/test_my_app/test_utils.pyfrom django.test import TestCase
from my_app.utils import BuisnessLogicProvider
class TestBuisnessLogicProvider(TestCase):
def setUp(self):
self.provider = BuisnessLogicProvider()
def test_some_logic(self):
pass