#python #django
#python #django
Вопрос:
Когда у меня есть представление, которое помогает при загрузке файла, я хочу, чтобы он был сохранен в базе данных, что возможно, только если я запускаю syncdb . Но до сих пор я знаю, как запустить python manage.py syncdb в командной строке python . Как мне заставить его запускаться автоматически при загрузке некоторых данных?
Комментарии:
1. пожалуйста, объясните, как это работает, потому что вы можете загрузить файл в базу данных без syncdb, поэтому, имхо, вам определенно не следует вызывать syncdb все время, пока вы загружаете файл
2. Загрузка файла не имеет никакого отношения к syncdb.
3. «Я хочу, чтобы это было сохранено в базе данных, что возможно, только если я запущу syncdb» — я не уверен, но что-то в этом предложении вызывает небольшой тревожный звоночек в моей голове. Опишите немного подробнее, чего вы хотите достичь. Бит ‘syncdb’ может быть отвлекающим маневром.
Ответ №1:
Немного хакерский способ:
import sys
sys.argv.append('syncdb')
from django.core.management import execute_manager
import settings # Your project's settings. Assumed to be in the same directory.
execute_manager(settings)
Ответ №2:
Вы всегда можете вызвать
os.system('python /path/manage.py syncdb')
Это должно запустить ваш процесс syncdb, однако, я думаю, что есть лучшие способы решить это без использования syncdb вообще.
О, и вам нужно будет использовать флаг, который будет отвечать y на все вопросы.
Ответ №3:
Вызов syncdb
при каждой загрузке файла сам по себе неверен, но отвечает на ваш вопрос. Вызывать syncdb
из внутреннего кода:
from django.core.management.commands.syncdb import Command as SyncDbCommand
SyncDbCommand().handle_noargs()
Комментарии:
1. Это дает
Commands out of sync; you can't run this command now
мне понять, я делаю что-то не так?
Ответ №4:
У Django есть официальный способ запуска команд управления из вашего кода