2010-09-25 6 views
7

Je suis en train d'ajouter les relations génériques et un à un support pour les relations commande django-test-utils makefixture, voici la source http://github.com/ericholscher/django-test-utils/blob/master/test_utils/management/commands/makefixture.pyDjango, relations génériques, faire fixtures

Quelqu'un a des idées comment fais ça? Ou peut-être il existe un autre outil pour une telle chose comme:

./manage.py dumpcmd User[:10] > fixtures.json 
+1

S'il vous plaît modifier la question d'inclure la source pertinente. Je ne vais pas faire l'effort de cliquer sur un autre site juste pour voir de quoi vous parlez, et il est plus difficile pour quelqu'un qui a le même problème que vous de découvrir cette question de cette façon. –

+0

Vous devriez ajouter quelques détails sur votre problème, quel est exactement le problème que vous avez? –

Répondre

1

Vous avez plusieurs options comment aborder le problème. Je vais me concentrer sur le poke-the-code aproach, depuis que ça fait un moment que je me suis baladé avec les internes de django.

J'ai inclus le code approprié ci-dessous à partir du lien. Notez que j'ai supprimé des parties non pertinentes. Notez également que la partie que vous allez éditer VOTRE CAS ICI a besoin d'un refactor.

Suivez l'algorithme suivant jusqu'à ce que vous soyez satisfait.

  1. Refactorisez les instructions if en fonction des champs dans (une ou plusieurs) fonction (s) séparée (s).
  2. Ajoutez le code d'inspection jusqu'à ce que vous compreniez quels champs correspondent aux relations génériques.
  3. Ajoutez le code d'extraction jusqu'à ce que les relations génériques soient suivies.
  4. Test.

    def handle_models(self, models, **options): 
    # SNIP handle options 
    
    all = objects 
    if propagate: 
        collected = set([(x.__class__, x.pk) for x in all]) 
        while objects: 
         related = [] 
         for x in objects: 
          if DEBUG: 
           print "Adding %s[%s]" % (model_name(x), x.pk) 
          # follow forward relation fields 
          for f in x.__class__._meta.fields + x.__class__._meta.many_to_many: 
           # YOU CASE HERE 
           if isinstance(f, ForeignKey): 
            new = getattr(x, f.name) # instantiate object 
            if new and not (new.__class__, new.pk) in collected: 
             collected.add((new.__class__, new.pk)) 
             related.append(new) 
           if isinstance(f, ManyToManyField): 
            for new in getattr(x, f.name).all(): 
             if new and not (new.__class__, new.pk) in collected: 
              collected.add((new.__class__, new.pk)) 
              related.append(new) 
          # SNIP 
         objects = related 
         all.extend(objects) 
    
    # SNIP serialization