Юг, кажется, загружает initial_data.json дважды - PullRequest
3 голосов
/ 25 августа 2011

Я работаю с Саутом над новым проектом 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 может быть не очень разумным, что связано с Югом, но я несколько удивлен, что не видел того же, что упоминалось в других местах? ... (Я ' Мы также разместили вопрос к списку, но он ожидает модерации)

Ответы [ 2 ]

7 голосов
/ 25 августа 2011

Рекомендованное решение - не использовать исходные данные с Югом вообще, а вместо этого вызывать loaddata из миграции:

См. Это обсуждение в группах Google - ссылка

0 голосов
/ 16 мая 2014

К сожалению, это больше не работает, так как django 1.6.

http://south.aeracode.org/ticket/1328

...