Django

Code

Ticket #3323: patch-foreignkey-attributeerror.diff

File patch-foreignkey-attributeerror.diff, 2.9 kB (added by Gregor_Kopka, 9 months ago)

Patch updated: fixed the error message to display the correct name of missing model

  • django/db/models/options.py

    old new  
    152152            rel_objs = [] 
    153153            for klass in get_models(): 
    154154                for f in klass._meta.fields: 
    155                     if f.rel and self == f.rel.to._meta: 
     155                    if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta: 
    156156                        rel_objs.append(RelatedObject(f.rel.to, klass, f)) 
    157157            self._all_related_objects = rel_objs 
    158158            return rel_objs 
     
    186186            rel_objs = [] 
    187187            for klass in get_models(): 
    188188                for f in klass._meta.many_to_many: 
    189                     if f.rel and self == f.rel.to._meta: 
     189                    if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta: 
    190190                        rel_objs.append(RelatedObject(f.rel.to, klass, f)) 
    191191            if app_cache_ready(): 
    192192                self._all_related_many_to_many_objects = rel_objs 
  • django/core/management/validation.py

    old new  
    7070            # Check to see if the related field will clash with any 
    7171            # existing fields, m2m fields, m2m related objects or related objects 
    7272            if f.rel: 
    73                 rel_opts = f.rel.to._meta 
    7473                if f.rel.to not in models.get_models(): 
    75                     e.add(opts, "'%s' has relation with model %s, which has not been installed" % (f.name, rel_opts.object_name)) 
     74                    e.add(opts, "'%s' has relation with model %s, which has not been installed" % (f.name, f.rel.to)) 
     75                    continue 
    7676 
     77                rel_opts = f.rel.to._meta 
    7778                rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name() 
    7879                rel_query_name = f.related_query_name() 
    7980                for r in rel_opts.fields: 
     
    101102        for i, f in enumerate(opts.many_to_many): 
    102103            # Check to see if the related m2m field will clash with any 
    103104            # existing fields, m2m fields, m2m related objects or related objects 
    104             rel_opts = f.rel.to._meta 
    105105            if f.rel.to not in models.get_models(): 
    106                 e.add(opts, "'%s' has m2m relation with model %s, which has not been installed" % (f.name, rel_opts.object_name)) 
     106                e.add(opts, "'%s' has m2m relation with model %s, which has not been installed" % (f.name, f.rel.to)) 
     107                continue 
    107108 
     109            rel_opts = f.rel.to._meta 
    108110            rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name() 
    109111            rel_query_name = f.related_query_name() 
    110112            # If rel_name is none, there is no reverse accessor.