Changeset 2381
- Timestamp:
- 02/24/06 04:25:02 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/db/models/fields/related.py
r2374 r2381 47 47 def contribute_to_class(self, cls, name): 48 48 sup = super(RelatedField, self) 49 50 # Add an accessor to allow easy determination of the related query path for this field 51 self.related_query_name = curry(self._get_related_query_name, cls._meta) 52 49 53 if hasattr(sup, 'contribute_to_class'): 50 54 sup.contribute_to_class(cls, name) … … 66 70 related = RelatedObject(other, cls, self) 67 71 self.contribute_to_related_class(other, related) 72 73 def _get_related_query_name(self, opts): 74 # This method defines the name that can be used to identify this related object 75 # in a table-spanning query. It uses the lower-cased object_name by default, 76 # but this can be overridden with the "related_name" option. 77 return self.rel.related_name or opts.object_name.lower() 68 78 69 79 class SingleRelatedObjectDescriptor(object): … … 242 252 243 253 if self.rel_type == 'o2m': 244 manager.core_filters = {'%s__ %s__exact' % (rel_field.name, rel_field.rel.to._meta.pk.name): getattr(instance, rel_field.rel.get_related_field().attname)}245 else: 246 manager.core_filters = {'%s__ %s__exact' % (rel_field.name, instance_type._meta.pk.name): instance._get_pk_val()}254 manager.core_filters = {'%s__pk' % rel_field.name: getattr(instance, rel_field.rel.get_related_field().attname)} 255 else: 256 manager.core_filters = {'%s__pk' % rel_field.name: instance._get_pk_val()} 247 257 248 258 manager.model = self.related.model … … 286 296 params = [instance._get_pk_val()] 287 297 ) 298 return superclass.get_query_set(self).filter(**(self.core_filters)) 299 288 300 def add(self, *objs, **kwargs): 289 301 _add_m2m_items(self, superclass, rel_model, join_table, source_col_name, … … 301 313 302 314 manager = RelatedManager() 315 316 manager.core_filters = {'%s__pk' % self.field.related_query_name() : instance._get_pk_val()} 317 303 318 manager.model = rel_model 304 319 … … 471 486 def _get_m2m_column_name(self, related): 472 487 "Function that can be curried to provide the source column name for the m2m table" 473 return related.model._meta.object_name.lower() + '_id' 474 488 # If this is an m2m relation to self, avoid the inevitable name clash 489 if related.model == related.parent_model: 490 return 'from_' + related.model._meta.object_name.lower() + '_id' 491 else: 492 return related.model._meta.object_name.lower() + '_id' 493 475 494 def _get_m2m_reverse_name(self, related): 476 495 "Function that can be curried to provide the related column name for the m2m table" 477 return related.parent_model._meta.object_name.lower() + '_id' 496 # If this is an m2m relation to self, avoid the inevitable name clash 497 if related.model == related.parent_model: 498 return 'to_' + related.parent_model._meta.object_name.lower() + '_id' 499 else: 500 return related.parent_model._meta.object_name.lower() + '_id' 478 501 479 502 def isValidIDList(self, field_data, all_data): django/branches/magic-removal/django/db/models/query.py
r2362 r2381 614 614 """ 615 615 if related_query: 616 matches = [f for f in field_list if f. get_query_name() == name]616 matches = [f for f in field_list if f.field.related_query_name() == name] 617 617 else: 618 618 matches = [f for f in field_list if f.name == name] django/branches/magic-removal/django/db/models/related.py
r2362 r2381 75 75 # but this can be overridden with the "related_name" option. 76 76 return self.field.rel.related_name or (self.opts.object_name.lower() + '_set') 77 78 def get_query_name(self):79 # This method defines the name that can be used to identify this related object80 # in a table-spanning query. It uses the lower-cased object_name by default,81 # but this can be overridden with the "related_name" option.82 return self.field.rel.related_name or self.opts.object_name.lower()
