2010-09-25 9 views
7

ich generische Beziehungen und eine Eins-zu-Eins-Beziehungen Unterstützung für django-Test-utils makefixture Befehl hinzufügen bin versucht, hier ist die Quelle http://github.com/ericholscher/django-test-utils/blob/master/test_utils/management/commands/makefixture.pyDjango, generische Beziehungen, machen Befestigungen

Hat jemand Ideen, wie man mach das? Oder möglicherweise gibt es ein anderes Werkzeug für so etwas wie:

+1

Bitte bearbeiten Frage die entsprechende Quelle aufzunehmen. Ich werde mich nicht bemühen, auf eine andere Website zu klicken, nur um zu sehen, worüber du redest, und es ist schwieriger für jemanden, der das gleiche Problem hat wie du, diese Frage auf diese Weise zu entdecken. –

+0

Sie sollten einige Details zu Ihrem Problem hinzufügen, was genau ist das Problem, das Sie haben? –

Antwort

1

Sie haben mehrere Möglichkeiten, wie Sie das Problem anzugehen. Ich konzentriere mich auf den Poke-the-Code Ansatz, da es schon eine Weile her ist, seit ich mit Django Internals herumgespielt habe.

Ich habe den entsprechenden Code unten aus dem Link eingefügt. Beachten Sie, dass ich irrelevante Teile entfernt habe. Beachten Sie auch, dass der zu bearbeitende Teil IHREN FALL HIER einen Refactor benötigt.

Folgen Sie dem folgenden Algorithmus, bis Sie zufrieden sind.

  1. Refactor die if Anweisungen abhängig von den Feldern in (eine oder mehrere) separate Funktion (en).
  2. Fügen Sie den Inspektionscode hinzu, bis Sie herausgefunden haben, welche Felder generischen Beziehungen entsprechen.
  3. Fügen Sie den Extraktionscode hinzu, bis die generischen Beziehungen befolgt werden.
  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 
    
Verwandte Themen