Спасибо за ваши ответы. Я нашел решение, которое работает для меня, и для совпадения было одним из предложений Брайана. Вот оно:
Елки Я отключил сигнал, который создал пользователь Супер после SyncDB, потому что у меня супер пользователь в моем AUTH_USER арматуре:
models.py:
from django.db.models import signals
from django.contrib.auth.management import create_superuser
from django.contrib.auth import models as auth_app
signals.post_syncdb.disconnect(
create_superuser,
sender=auth_app,
dispatch_uid = "django.contrib.auth.management.create_superuser")
Тогда Я создал сигнал, который будет вызываться после SyncDB:
< MyProject>/< MyApp>/управление/__ init__.py
"""
Loads fixtures for files in sql/<modelname>.sql
"""
from django.db.models import get_models, signals
from django.conf import settings
import <myproject>.<myapp>.models as auth_app
def load_fixtures(app, **kwargs):
import MySQLdb
db=MySQLdb.connect(host=settings.DATABASE_HOST or "localhost", \
user=settings.DATABASE_USER,
passwd=settings.DATABASE_PASSWORD, port=int(settings.DATABASE_PORT or 3306))
cursor = db.cursor()
try:
print "Loading fixtures to %s from file %s." % (settings.DATABASE_NAME, \
settings.FIXTURES_FILE)
f = open(settings.FIXTURES_FILE, 'r')
cursor.execute("use %s;" % settings.DATABASE_NAME)
for line in f:
if line.startswith("INSERT"):
try:
cursor.execute(line)
except Exception, strerror:
print "Error on loading fixture:"
print "-- ", strerror
print "-- ", line
print "Fixtures loaded"
except AttributeError:
print "FIXTURES_FILE not found in settings. Please set the FIXTURES_FILE in \
your settings.py"
cursor.close()
db.commit()
db.close()
signals.post_syncdb.connect(load_fixtures, sender=auth_app, \
dispatch_uid = "<myproject>.<myapp>.management.load_fixtures")
И в моем settings.py Я добавил FIXTURES_FILE с пути к моему .sql файл с SQL дамп.
Одна вещь, которую я до сих пор не нашел, заключается в том, как запустить этот сигнал только после создания таблиц, а не при каждом запуске syncdb. Временная работа для этого - использование INSERT IGNORE INTO в моей команде sql.
Я знаю, что это решение далека от совершенства, и критики/улучшения/мнения очень приветствуются!
С уважением,
Aldo
Я знаю, но есть ли способ автоматизировать это, точно так же, как обычные светильники вызывают в syncdb? – aldux
@aldux: Afaik not –