Django

Code

Changeset 5232

Show
Ignore:
Timestamp:
05/14/07 09:14:49 (2 years ago)
Author:
russellm
Message:

Fixed #4288 -- Modified serializers to pay attention to the to_field attribute on ForeignKeys?. Thanks to Sandro Dentella for the report and the helpful test case.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/core/management.py

    r5172 r5232  
    14051405                        print "No %s fixture '%s' in %s." % \ 
    14061406                            (format, fixture_name, humanize(fixture_dir)) 
     1407                             
     1408    sequence_sql = backend.get_sql_sequence_reset(style, models) 
     1409    if sequence_sql: 
     1410        if verbosity > 1: 
     1411            print "Resetting sequences" 
     1412        for line in sequence_sql: 
     1413            cursor.execute(line) 
     1414             
     1415    transaction.commit() 
     1416    transaction.leave_transaction_management() 
     1417     
    14071418    if count[0] == 0: 
    14081419        if verbosity > 0: 
     
    14111422        if verbosity > 0: 
    14121423            print "Installed %d object(s) from %d fixture(s)" % tuple(count) 
    1413         sequence_sql = backend.get_sql_sequence_reset(style, models) 
    1414         if sequence_sql: 
    1415             if verbosity > 1: 
    1416                 print "Resetting sequences" 
    1417             for line in sequence_sql: 
    1418                 cursor.execute(line) 
    1419     transaction.commit() 
    1420     transaction.leave_transaction_management() 
    14211424 
    14221425load_data.help_doc = 'Installs the named fixture(s) in the database' 
  • django/trunk/django/core/serializers/python.py

    r4718 r5232  
    3838        related = getattr(obj, field.name) 
    3939        if related is not None: 
    40             related = related._get_pk_val(
     40            related = getattr(related, field.rel.field_name
    4141        self._current[field.name] = related 
    4242     
     
    8181            # Handle FK fields 
    8282            elif field.rel and isinstance(field.rel, models.ManyToOneRel): 
    83                 data[field.attname] = field.rel.to._meta.pk.to_python(field_value) 
     83                if field_value: 
     84                    data[field.attname] = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value) 
     85                else: 
     86                    data[field.attname] = None 
    8487                     
    8588            # Handle all other fields 
  • django/trunk/django/core/serializers/xml_serializer.py

    r4733 r5232  
    8383        related = getattr(obj, field.name) 
    8484        if related is not None: 
    85             self.xml.characters(str(related._get_pk_val())) 
     85            self.xml.characters(str(getattr(related, field.rel.field_name))) 
    8686        else: 
    8787            self.xml.addQuickElement("None") 
     
    182182            return None 
    183183        else: 
    184             return field.rel.to._meta.pk.to_python( 
     184            return field.rel.to._meta.get_field(field.rel.field_name).to_python( 
    185185                       getInnerText(node).strip().encode(self.encoding)) 
    186186         
  • django/trunk/tests/regressiontests/serializers_regress/models.py

    r5172 r5232  
    117117    data = models.ManyToManyField('self', null=True, symmetrical=False) 
    118118 
     119 
     120class UniqueAnchor(models.Model): 
     121    """This is a model that can be used as  
     122    something for other models to point at""" 
     123 
     124    data = models.CharField(unique=True, maxlength=30) 
     125 
     126class FKDataToField(models.Model): 
     127    data = models.ForeignKey(UniqueAnchor, null=True, to_field='data') 
     128 
    119129# The following test classes are for validating the 
    120130# deserialization of objects that use a user-defined 
  • django/trunk/tests/regressiontests/serializers_regress/tests.py

    r4752 r5232  
    185185    (m2m_obj, 446, M2MSelfData, []), 
    186186 
     187    (data_obj, 450, UniqueAnchor, "UAnchor 1"), 
     188    (fk_obj, 451, FKDataToField, "UAnchor 1"), 
     189    (fk_obj, 452, FKDataToField, "UAnchor 2"), 
     190    (fk_obj, 453, FKDataToField, None), 
     191    (data_obj, 454, UniqueAnchor, "UAnchor 2"), 
     192     
    187193    (data_obj, 500, Anchor, "Anchor 3"), 
    188194    (data_obj, 501, Anchor, "Anchor 4"),