Ticket #13574: django_m2m_field_name.diff

File django_m2m_field_name.diff, 3.4 KB (added by aitorciki, 14 years ago)
  • django/db/models/sql/query.py

     
    12401240                                to_col2, opts, target) = cached_data
    12411241                    else:
    12421242                        table1 = field.m2m_db_table()
    1243                         from_col1 = opts.pk.column
     1243                        from_col1 = field.m2m_to_field_name()
    12441244                        to_col1 = field.m2m_column_name()
    12451245                        opts = field.rel.to._meta
    12461246                        table2 = opts.db_table
    12471247                        from_col2 = field.m2m_reverse_name()
    1248                         to_col2 = opts.pk.column
     1248                        to_col2 = field.m2m_reverse_to_field_name()
    12491249                        target = opts.pk
    12501250                        orig_opts._join_cache[name] = (table1, from_col1,
    12511251                                to_col1, table2, from_col2, to_col2, opts,
     
    12931293                                to_col2, opts, target) = cached_data
    12941294                    else:
    12951295                        table1 = field.m2m_db_table()
    1296                         from_col1 = opts.pk.column
     1296                        from_col1 = field.m2m_reverse_to_field_name()
    12971297                        to_col1 = field.m2m_reverse_name()
    12981298                        opts = orig_field.opts
    12991299                        table2 = opts.db_table
    13001300                        from_col2 = field.m2m_column_name()
    1301                         to_col2 = opts.pk.column
     1301                        to_col2 = field.m2m_to_field_name()
    13021302                        target = opts.pk
    13031303                        orig_opts._join_cache[name] = (table1, from_col1,
    13041304                                to_col1, table2, from_col2, to_col2, opts,
  • django/db/models/fields/related.py

     
    10201020            return getattr(self, cache_attr)
    10211021        for f in self.rel.through._meta.fields:
    10221022            if hasattr(f,'rel') and f.rel and f.rel.to == related.model:
    1023                 setattr(self, cache_attr, getattr(f, attr))
     1023                if attr == 'to_field':
     1024                    setattr(self, cache_attr, f.rel.field_name)
     1025                else:
     1026                    setattr(self, cache_attr, getattr(f, attr))
    10241027                return getattr(self, cache_attr)
    10251028
    10261029    def _get_m2m_reverse_attr(self, related, attr):
     
    10421045                    else:
    10431046                        found = True
    10441047                else:
    1045                     setattr(self, cache_attr, getattr(f, attr))
     1048                    if attr == 'to_field':
     1049                        setattr(self, cache_attr, f.rel.field_name)
     1050                    else:
     1051                        setattr(self, cache_attr, getattr(f, attr))
    10461052                    break
    10471053        return getattr(self, cache_attr)
    10481054
     
    11291135        self.m2m_field_name = curry(self._get_m2m_attr, related, 'name')
    11301136        self.m2m_reverse_field_name = curry(self._get_m2m_reverse_attr, related, 'name')
    11311137
     1138        self.m2m_to_field_name = curry(self._get_m2m_attr, related, 'to_field')
     1139        self.m2m_reverse_to_field_name = curry(self._get_m2m_reverse_attr, related, 'to_field')
     1140
    11321141    def set_attributes_from_rel(self):
    11331142        pass
    11341143
Back to Top