Django 1.6: Как игнорировать фикстуру в python manage.py loaddata?
Мне нужен ответ для этого, сейчас я делаю эту команду:
python manage.py loaddata app/myapp/fixtures/* --settings=setting.develop
Это работает нормально, но теперь я хочу сделать эту же команду, но игнорирую или пропускаю простой файл в app / myapp / fixtures /, поэтому я не хочу писать по одной loaddata для каждого устройства внутри, я хотел сделать только одну команду и используйте что-то вроде --exclude или --ignore или какой-то другой способ сделать это в одну строку и держите /* для повторения всех файлов внутри.
Заранее спасибо!
1 ответ
Решение
Написание вашей собственной команды управления в Django очень просто; и наследство от Джанго loaddata
Команда делает это тривиальным:
excluding_loaddata.py
from optparse import make_option
from django.core.management.commands.loaddata import Command as LoadDataCommand
class Command(LoadDataCommand):
option_list = LoadDataCommand.option_list + (
make_option('-e', '--exclude', action='append',
help='Exclude given fixture/s from being loaded'),
)
def handle(self, *fixture_labels, **options):
self.exclude = options.get('exclude')
return super(Command, self).handle(*fixture_labels, **options)
def find_fixtures(self, *args, **kwargs):
updated_fixtures = []
fixture_files = super(Command, self).find_fixtures(*args, **kwargs)
for fixture_file in fixture_files:
file, directory, name = fixture_file
# exclude a matched file path, directory or name (filename without extension)
if file in self.exclude or directory in self.exclude or name in self.exclude:
if self.verbosity >= 1:
self.stdout.write('Fixture skipped (excluded: %s, matches %s)' %
(self.exclude, [file, directory, name]))
else:
updated_fixtures.append(fixture_file)
return updated_fixtures
использование:
$ python manage.py excluding_loaddata app/fixtures/* -e not_this_fixture