я использую Джанго 1,8 У меня есть модель со ссылкой на django.contrib.contenttypes.ContentType:Джанго 1.8 испытания с моделями и миграции
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
def __str__(self): # __unicode__ on Python 2
return self.tag
И у меня есть tests.py:
class TestObj(models.Model):
value = models.IntegerField(default=42, null=False)
def __str__(self):
text = "%s-%i" % ("name", self.value)
return text
class MyUnitTest(TestCase):
def setUp(self):
TestObj.objects.create(value=40)
TestObj.objects.create()
def test_my_test(self):
obj1 = TestObj.objects.get(value=40)
obj2 = TestObj.objects.get(value=42)
self.assertEqual(obj1.value, 40)
self.assertEqual(obj2.value, 42)
Когда я пытаюсь создать БД без миграции (и «тест» тоже), я получаю сообщение об ошибке с неверной ссылкой:
./manage.py syncdb
...
django.db.utils.ProgrammingError: ERROR: reference "django_content_type" does not exist
Но если я создаю миграции (./manage.py makemigrations myobj), миграция содержит только models.py модель (TaggedItem):
Migrations for 'myobj':
0001_initial.py:
- Create model TaggedItem
После того как я пытаюсь проверить мое приложение, и я получаю сообщение об ошибке со ссылкой myob_testobj не существует:
./manage.py test -v3
Creating test database for alias 'default' ('testdb_49308_4288843')...
Operations to perform:
Synchronize unmigrated apps: staticfiles
Apply all migrations: myobj, contenttypes, sessions
Synchronizing apps without migrations:
Running pre-migrate handlers for application contenttypes
Running pre-migrate handlers for application sessions
Running pre-migrate handlers for application myobj
Creating tables...
Running deferred SQL...
Installing custom SQL...
Loading 'initial_data' fixtures...
Checking 'mypro' for fixtures...
No fixture 'initial_data' in 'mypro'.
Installed 0 object(s) from 0 fixture(s)
Running migrations:
Rendering model states... DONE (0.010s)
Applying contenttypes.0001_initial... OK (0.133s)
Applying contenttypes.0002_remove_content_type_name... OK (0.017s)
Applying myobj.0001_initial... OK (0.217s)
Applying sessions.0001_initial... OK (0.233s)
Running post-migrate handlers for application contenttypes
Adding content type 'contenttypes | contenttype'
Running post-migrate handlers for application sessions
Adding content type 'sessions | session'
Running post-migrate handlers for application myobj
Adding content type 'myobj | taggeditem'
Adding content type 'myobj | testobj'
Traceback
...
django.db.utils.ProgrammingError: ERROR: reference "myobj_testobj" does not exist
Если я не использую миграции и запустить тест, таблица myobj_testobj была создана, но я получаю сообщение об ошибке без ссылки на «django_content_type»
/manage.py test -v3
Creating test database for alias 'default' ('testdb_773982_6463361')...
Operations to perform:
Synchronize unmigrated apps: staticfiles, myobj
Apply all migrations: contenttypes, sessions
Synchronizing apps without migrations:
Running pre-migrate handlers for application contenttypes
Running pre-migrate handlers for application sessions
Running pre-migrate handlers for application myobj
Creating tables...
Creating table myobj_taggeditem
**Creating table myobj_testobj**
Running deferred SQL...
Traceback
...
django.db.utils.ProgrammingError: ERROR: reference "django_content_type" does not exist
Как использовать тесты с моделями? Спасибо.
syncdb не так важен. Проблема при тестировании с/без файлов миграции. Если эти файлы присутствуют - таблица с тестовой моделью не создается, если нет - я получаю сообщение об ошибке без ссылки на django_content_type. Миграция вместо команды syncdb не разрешает мою проблему. Спасибо за ваш ответ – Shi3A