Ticket #3323: django-string-rel-with-test.patch
File django-string-rel-with-test.patch, 4.7 KB (added by , 17 years ago) |
---|
-
django/db/models/options.py
152 152 rel_objs = [] 153 153 for klass in get_models(): 154 154 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: 156 156 rel_objs.append(RelatedObject(f.rel.to, klass, f)) 157 157 self._all_related_objects = rel_objs 158 158 return rel_objs … … 186 186 rel_objs = [] 187 187 for klass in get_models(): 188 188 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: 190 190 rel_objs.append(RelatedObject(f.rel.to, klass, f)) 191 191 if app_cache_ready(): 192 192 self._all_related_many_to_many_objects = rel_objs -
django/core/management/validation.py
72 72 # Check to see if the related field will clash with any 73 73 # existing fields, m2m fields, m2m related objects or related objects 74 74 if f.rel: 75 rel_opts = f.rel.to._meta76 75 if f.rel.to not in models.get_models(): 77 e.add(opts, "'%s' has relation with model %s, which has not been installed" % (f.name, rel_opts.object_name)) 76 e.add(opts, "'%s' has relation with model %s, which has not been installed" % (f.name, f.rel.to)) 77 # it is a string and we could not find the model it refers to 78 # so skip the next section 79 if isinstance(f.rel.to, (str, unicode)): 80 continue 78 81 82 rel_opts = f.rel.to._meta 79 83 rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name() 80 84 rel_query_name = f.related_query_name() 81 85 for r in rel_opts.fields: … … 103 104 for i, f in enumerate(opts.many_to_many): 104 105 # Check to see if the related m2m field will clash with any 105 106 # existing fields, m2m fields, m2m related objects or related objects 106 rel_opts = f.rel.to._meta107 107 if f.rel.to not in models.get_models(): 108 e.add(opts, "'%s' has m2m relation with model %s, which has not been installed" % (f.name, rel_opts.object_name)) 108 e.add(opts, "'%s' has m2m relation with model %s, which has not been installed" % (f.name, f.rel.to)) 109 # it is a string and we could not find the model it refers to 110 # so skip the next section 111 if isinstance(f.rel.to, (str, unicode)): 112 continue 109 113 114 rel_opts = f.rel.to._meta 110 115 rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name() 111 116 rel_query_name = f.related_query_name() 112 117 # If rel_name is none, there is no reverse accessor. -
tests/modeltests/invalid_models/models.py
108 108 colour = models.CharField(max_length=5) 109 109 model = models.ForeignKey(Model) 110 110 111 class MissingRelations(models.Model): 112 rel1 = models.ForeignKey("Rel1") 113 rel2 = models.ManyToManyField("Rel2") 114 111 115 model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "max_length" attribute. 112 116 invalid_models.fielderrors: "decimalfield": DecimalFields require a "decimal_places" attribute. 113 117 invalid_models.fielderrors: "decimalfield": DecimalFields require a "max_digits" attribute. … … 191 195 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'. 192 196 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_3' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_3'. 193 197 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_4' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_4'. 198 invalid_models.missingrelations: 'rel2' has m2m relation with model Rel2, which has not been installed 199 invalid_models.missingrelations: 'rel1' has relation with model Rel1, which has not been installed 194 200 """