Как заставить syncdb работать автоматически в Django?

#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 есть официальный способ запуска команд управления из вашего кода