Ticket #197: recurisve-patch.diff

File recurisve-patch.diff, 1.3 KB (added by mike@…, 3 years ago)

fix recursive fields

  • south/management/commands/startmigration.py

    diff -r e82940a7c9f0 south/management/commands/startmigration.py
    a b  
    669669    return depends 
    670670 
    671671 
    672 def field_dependencies(field, last_models=None): 
    673     depends = {} 
    674     if isinstance(field, (models.OneToOneField, models.ForeignKey, models.ManyToManyField)): 
     672def field_dependencies(field, last_models=None, processed=set()): 
     673 
     674    depends={} 
     675 
     676    if isinstance(field, (models.OneToOneField, models.ForeignKey, models.ManyToManyField, GenericRelation)): 
     677 
     678        if str(field.rel.to) in processed: 
     679            return depends 
     680        else: 
     681            processed.add(str(field.rel.to)) 
     682     
    675683        depends[field.rel.to] = last_models 
    676         depends.update(field_dependencies(field.rel.to._meta.pk, last_models)) 
     684        depends.update(field_dependencies(field.rel.to._meta.pk, last_models,processed)) 
     685         
    677686    return depends 
    678687     
    679688 
     
    972981        # Deleting unique_together for [%s] on %s. 
    973982        db.delete_unique(%r, %r) 
    974983        ''' 
    975 FIELD_NEEDS_DEF_SNIPPET = "<< PUT FIELD DEFINITION HERE >>" 
    976  No newline at end of file 
     984FIELD_NEEDS_DEF_SNIPPET = "<< PUT FIELD DEFINITION HERE >>"