Это просто теория, которую я хотел бы выяснить, основываясь на отзывах других и, возможно, на подобном опыте.
Я использовал mySQL для запуска тестов, но, конечно, база данных SQLite в памяти намного быстрее.Однако, похоже, что он столкнулся с некоторыми проблемами.
Когда DATABASE_ENGINE
установлен на использование django.db.backends.sqlite3
и я запускаю manage.py test
, вывод не такой, как ожидалось:
(Удаленобольшинство строк, но они указывают на интересные точки отказа)
$ python manage.py test
Traceback (most recent call last):
File "manage.py", line 12, in
execute_manager(settings)
File "/Users/bartekc/.virtualenvs/xx/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 51, in
class AcvTripIncentive(models.Model):
# First interesting failure
File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 55, in AcvTripIncentive
trip = models.OneToOneField(Trip, limit_choices_to={'sites' : Site.objects.get(name='ZZ'), 'is_active' : True,})
# Next interesting failure
File "/Users/bartekc/domains/xx/xx/associates/yyz/models.py", line 252, in
current_site = Site.objects.get_current()
Существует несколько подобных сбоев, но они просто указывают на пару.Проблема очевидна.Модель сайта не имеет фактических данных, но файлы содержат код, который пытается извлечь текущие или конкретные экземпляры в рамках модели сайта.
Теперь я могу придумать простое решение: OneToOneField
должно бытьпереключился на использование функции с limit_choices_to
, а вторая такая же.Затем функции вызываются при необходимости, а не при первоначальном сканировании файла Django.
Тем не менее, мой актуальный вопрос: почему это происходит с SQLite, а не с MySQL? .Есть ли разный способ обработки двумя ядрами базы данных через тесты?Я бы так не думал, так как Python выполняет всю компиляцию моделей.
Что именно здесь происходит?
Cheers.