2016-02-12 3 views
4

je besoin d'une réponse pour cela, im en ce moment faire cette commande:Django 1.6: Comment ignorer un appareil en python manage.py loaddata?

python manage.py loaddata app/myapp/fixtures/* --settings=setting.develop 

Cela fonctionne bien, mais maintenant je veux faire la même commande, mais en ignorant ou skiping un fichier simple à l'intérieur app/myapp/accessoires/donc je ne veux pas écrire une loaddata pour chaque projecteur à l'intérieur, je voulais faire une seule commande et utiliser quelque chose comme --exclude ou --ignore ou un moyen de le faire en une ligne et garder le/* aller contre tous les fichiers à l'intérieur.

Merci d'avance!

+0

Je ne crois pas qu'il y ait une telle exclure ou ignorer les options de ' loaddata'. Peut-être pourriez-vous simplement combiner tous les appareils que vous souhaitez inclure dans un appareil plus grand et simplement les importer par leur nom? – Fiver

+0

Selon votre cas d'utilisation exact, vous pourriez être amené à automatiser le ['loaddata'] (https://docs.djangoproject.com/es/1.9/ref/django-admin/#loaddata) pour les appareils que vous voulez avec un script shell, ou votre propre commande de gestion qui utilise ['call_command'] (https://docs.djangoproject.com/es/1.9/ref/django-admin/#running-management-commands-from-your-code). – tutuDajuju

Répondre

2

L'écriture your own management command in Django est simple; et héritant de commande de Django loaddata rend trivial:

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 

utilisation:

$ python manage.py excluding_loaddata app/fixtures/* -e not_this_fixture