Fixed Django1.9 compatibility and added test.

This commit is contained in:
bphillips 2015-12-07 11:13:04 -05:00
parent 21839e45c6
commit dae5a5ce43
2 changed files with 36 additions and 1 deletions

View File

@ -1132,7 +1132,7 @@ class ModelSerializer(Serializer):
to_field = field_kwargs.pop('to_field', None)
if relation_info.reverse:
if to_field and not relation_info.related_model_field.related_field.primary_key:
if to_field and not relation_info.related_model_field.related_fields[0][1].primary_key:
field_kwargs['slug_field'] = to_field
field_class = self.serializer_related_to_field
else:

View File

@ -899,3 +899,38 @@ class TestDecimalFieldMappings(TestCase):
serializer = TestSerializer()
assert len(serializer.fields['decimal_field'].validators) == 2
class Issue3674Test(TestCase):
def test_nonPK_foreignkey_model_serializer(self):
class TestParentModel(models.Model):
title = models.CharField(max_length=64)
class TestChildModel(models.Model):
parent = models.ForeignKey(TestParentModel, related_name='children')
value = models.CharField(primary_key=True, max_length=64)
class TestChildModelSerializer(serializers.ModelSerializer):
class Meta:
model = TestChildModel
fields = ('value', 'parent')
class TestParentModelSerializer(serializers.ModelSerializer):
class Meta:
model = TestParentModel
fields = ('id', 'title', 'children')
parent_expected = dedent("""
TestParentModelSerializer():
id = IntegerField(label='ID', read_only=True)
title = CharField(max_length=64)
children = PrimaryKeyRelatedField(many=True, queryset=TestChildModel.objects.all())
""")
self.assertEqual(unicode_repr(TestParentModelSerializer()), parent_expected)
child_expected = dedent("""
TestChildModelSerializer():
value = CharField(max_length=64, validators=[<UniqueValidator(queryset=TestChildModel.objects.all())>])
parent = PrimaryKeyRelatedField(queryset=TestParentModel.objects.all())
""")
self.assertEqual(unicode_repr(TestChildModelSerializer()), child_expected)