Code

Ticket #14226: dumpdata.patch

File dumpdata.patch, 1.3 KB (added by aneil, 4 years ago)

Patch processes M2M tables correctly

  • django/core/management/commands/dumpdata.py

     
    132132        if model_list is None: 
    133133            model_list = get_models(app) 
    134134 
    135         for model in model_list: 
     135        while model_list: 
     136            model = model_list.pop() 
    136137            models.add(model) 
    137138            # Add any explicitly defined dependencies 
    138139            if hasattr(model, 'natural_key'): 
     
    150151                    if hasattr(rel_model, 'natural_key'): 
    151152                        deps.append(rel_model) 
    152153            for field in model._meta.many_to_many: 
    153                 rel_model = field.rel.to 
    154                 if hasattr(rel_model, 'natural_key'): 
    155                     deps.append(rel_model) 
     154                m2m_model = field.rel.through 
     155                if hasattr(m2m_model, 'natural_key'): 
     156                        # if the m2m model is not in the model_dependencies list,  
     157                        # add it for processing 
     158                        if not any((m[0]==m2m_model for m in model_dependencies)): 
     159                                model_list.append(m2m_model) 
     160                         
    156161            model_dependencies.append((model, deps)) 
    157162 
    158163    model_dependencies.reverse()