2010-09-25 11 views
7

estoy tratando de añadir las relaciones genéricas y apoyo de uno a uno las relaciones de comando django-test-utils makefixture, aquí es la fuente http://github.com/ericholscher/django-test-utils/blob/master/test_utils/management/commands/makefixture.pyDjango, las relaciones genéricas, hacer accesorios

¿Alguien tiene idea de cómo ¿hacer esto? O puede haber otra herramienta para lo siguiente:

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

favor editar pregunta para incluir la fuente pertinente. No voy a hacer el esfuerzo de hacer clic en otro sitio solo para ver de qué estás hablando, y es más difícil para alguien que tiene el mismo problema que tú descubrir esta pregunta de esta manera. –

+0

Debe agregar algunos detalles sobre su problema, ¿cuál es exactamente el problema que tiene? –

Respuesta

1

Tiene varias opciones para solucionar el problema. Me concentraré en el acercamiento poke-the-code, ya que ha pasado un tiempo desde que me volví loco con django internal.

He incluido el código correspondiente a continuación del enlace. Tenga en cuenta que he eliminado las partes irrelevantes. También tenga en cuenta que la parte que va a editar SU CASO AQUÍ necesita un refactor.

Sigue el siguiente algoritmo hasta que estés satisfecho.

  1. Refactorizar las declaraciones if dependiendo de los campos en (una o más) funciones separadas.
  2. Agregue el código de inspección hasta que descubra qué campos corresponden a las relaciones genéricas.
  3. Agregue código de extracción hasta que se sigan las relaciones genéricas.
  4. Prueba.

    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 
    
Cuestiones relacionadas