Как загрузить светильник sql в Django для модели User?

Если вы не используете объект прототипа, вы можете пойти так. поскольку все экземпляры вашего объекта возвращают значение экземпляра obj ...

13
задан aldux 9 March 2010 в 21:07
поделиться

3 ответа

Спасибо за ответы. Я нашел решение, которое работает для меня, и по совпадению было одним из предложений Брайана. Вот он:

Сначала я отключил сигнал, который создал суперпользователя после 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:

/ / management / __ 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.

Я знаю, что это решение далеко от совершенства, и критика / улучшения / мнения приветствуются!

С уважением,

Альдо

4
ответ дан 1 December 2019 в 17:51
поделиться

Вы ищете loaddata :

manage.py loadata path/to/your/fixtureFile

Но я думаю, что эта команда может работать только с файлами в XML, YAML, Python или Формат JSON ( см. Здесь ). Чтобы создать такие подходящие файлы, воспользуйтесь методом dumpdata .

8
ответ дан 1 December 2019 в 17:51
поделиться

Можно вручную импортировать SQL-код auth.User, а затем выгружать его в стандартное приспособление Django (назовите его initial_data, если хотите, чтобы его нашел syncdb ). Как правило, вы можете поместить этот файл в каталог фикстур любого приложения, поскольку все фиксированные данные будут иметь ключ с правильным app_label. Или вы можете создать пустое / фиктивное приложение и поместить его туда.

Другой вариант - переопределить команду syncdb и применить прибор по своему усмотрению.

Я согласен с Феликсом в том, что в Django нет нетривиальной естественной ловушки для заполнения приложений contrib с помощью SQL.

3
ответ дан 1 December 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: