Я работаю с Саутом над новым проектом Django.
Я только что добавил новую модель Client
, и я хотел бы убедиться, что любые запускаемые тесты или любые новые настройки базы данных всегда заполняются экземпляром Client
, поэтому Я добавил новый экземпляр в проект initial_data.json
.
Теперь, когда я запускаю тесты или заполняю новую базу данных, похоже, что initial_data.json
загружается дважды - один раз после первого создания таблиц. (который завершается с трассировкой). и второй раз, после того, как миграции были применены. (что очень хорошо)
Например, запуск manage.py syncdb --migrate --noinput
дает мне следующий вывод:
Syncing...
Creating tables ...
<snip>
Installing custom SQL ...
Installing indexes ...
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File ".../django/core/management/commands/loaddata.py", line 174, in handle
obj.save(using=using)
File ".../django/core/serializers/base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File ".../django/db/models/base.py", line 522, in save_base
manager.using(using).filter(pk=pk_val).exists())):
File ".../django/db/models/query.py", line 496, in exists
return self.query.has_results(using=self.db)
File ".../django/db/models/sql/query.py", line 424, in has_results
return bool(compiler.execute_sql(SINGLE))
File ".../django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File ".../django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File ".../django/db/backends/sqlite3/base.py", line 234, in execute
return Database.Cursor.execute(self, query, params)
DatabaseError: no such table: core_client
Migrating...
Running migrations for core:
<snip>
- Loading initial data for assetcloud.
Installed 5 object(s) from 1 fixture(s)
Или, если я запускаю manage.py test SouthProblems
в следующем тесте:
class SouthProblems(TestCase):
def test_south_problems(self):
print Client.objects.all()
Я получу этот вывод:
Creating test database for alias 'default'...
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
<snip, as before>
DatabaseError: no such table: core_client
[<Client: example>]
.
----------------------------------------------------------------------
Ran 1 test in 0.013s
OK
В обоих случаях исходные данные, по-видимому, были успешно созданы, но я получаю ненужные трассировки.
Мне интересно, не правильно ли я использую юг по отношению к. исходные данные фиксаций?
Я также отследил этот билет: http://south.aeracode.org/ticket/372, который звучит как то, что я вижу, но это было 18 месяцев назад, и билет помечен как фиксированный.
Я использую Django 1.3, а South 0.7.3
EDIT:
Я также видел это: http://south.aeracode.org/docs/commands.html#initial-data-and-post-syncdb, хотя я не совсем уверен в примечаниях к документации, стоит ли ожидать, что Юг попытается загрузить приспособления до применения каких-либо миграций.
Вот это https://groups.google.com/d/topic/south-users/PWpQn61UDmI/discussion,, которое предполагает, что использование initial_data может быть не очень разумным, что связано с Югом, но я несколько удивлен, что не видел того же, что упоминалось в других местах? ... (Я ' Мы также разместили вопрос к списку, но он ожидает модерации)