2010-09-25 8 views
7

sto cercando di aggiungere rapporti generici e supporto one-to-one rapporti per il comando django-test-utils makefixture, qui è la fonte http://github.com/ericholscher/django-test-utils/blob/master/test_utils/management/commands/makefixture.pyDjango, rapporti generici, fanno infissi

Qualcuno ha idee su come Fai questo? Oppure potrebbe esserci un altro strumento come:

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

Si prega di modificare domanda per includere l'origine. Non farò lo sforzo di fare clic su un altro sito solo per vedere di cosa stai parlando, ed è più difficile per qualcuno che ha lo stesso problema di scoprire questa domanda in questo modo. –

+0

Dovresti aggiungere alcuni dettagli sul tuo problema, qual è esattamente il problema che hai? –

risposta

1

Hai diverse opzioni su come affrontare il problema. Mi concentrerò sull'aprano poke-the-code, dal momento che è stato un po 'di tempo da quando ho fatto il giro con gli interni di django.

Ho incluso il codice rilevante qui sotto dal collegamento. Si noti che ho rimosso le parti non pertinenti. Si noti inoltre che la parte che si sta modificando è IL TUO CASO ha bisogno di un refactoring.

Seguire il seguente algoritmo finché non si è soddisfatti.

  1. Refactoring le istruzioni if in base ai campi in (uno o più) funzioni separate.
  2. Aggiungere il codice di ispezione fino a quando non si capisce quali campi corrispondono a relazioni generiche.
  3. Aggiungere il codice di estrazione finché non vengono seguite le relazioni generiche.
  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