diff --git a/example/serializers.py b/example/serializers.py index c0ed70ca..5ea1b4fe 100644 --- a/example/serializers.py +++ b/example/serializers.py @@ -76,4 +76,5 @@ class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment - fields = ('entry', 'body', 'author',) + exclude = ('created_at', 'modified_at',) + # fields = ('entry', 'body', 'author',) diff --git a/example/tests/test_serializers.py b/example/tests/test_serializers.py index 6712ec7e..ecd2330d 100644 --- a/example/tests/test_serializers.py +++ b/example/tests/test_serializers.py @@ -1,3 +1,4 @@ +from django.core.urlresolvers import reverse from django.test import TestCase from django.utils import timezone @@ -6,6 +7,11 @@ from example.models import Blog, Entry, Author +import pytest +from example.tests.utils import dump_json, redump_json + +pytestmark = pytest.mark.django_db + class TestResourceIdentifierObjectSerializer(TestCase): def setUp(self): @@ -71,3 +77,41 @@ def test_deserialize_many(self): print(serializer.data) + +class TestModelSerializer(object): + def test_model_serializer_with_implicit_fields(self, comment, client): + expected = { + "data": { + "type": "comments", + "id": str(comment.pk), + "attributes": { + "body": comment.body + }, + "relationships": { + "entry": { + "data": { + "type": "entries", + "id": str(comment.entry.pk) + } + }, + "author": { + "data": { + "type": "authors", + "id": str(comment.author.pk) + } + }, + } + } + } + + response = client.get(reverse("comment-detail", kwargs={'pk': comment.pk})) + + assert response.status_code == 200 + + actual = redump_json(response.content) + expected_json = dump_json(expected) + + print("ACTUAL: " + actual.decode()) + print("EXPECTED: " + expected_json.decode()) + + assert actual == expected_json diff --git a/rest_framework_json_api/serializers.py b/rest_framework_json_api/serializers.py index 94e01c0d..c0eaed72 100644 --- a/rest_framework_json_api/serializers.py +++ b/rest_framework_json_api/serializers.py @@ -137,12 +137,6 @@ class ModelSerializer(IncludedResourcesValidationMixin, SparseFieldsetsMixin, Mo """ serializer_related_field = ResourceRelatedField - def __init__(self, *args, **kwargs): - meta_fields = getattr(self.Meta, 'meta_fields', []) - # we add meta_fields to fields so they will be serialized like usual - self.Meta.fields = tuple(tuple(self.Meta.fields) + tuple(meta_fields)) - super(ModelSerializer, self).__init__(*args, **kwargs) - def get_field_names(self, declared_fields, info): """ We override the parent to omit explicity defined meta fields (such @@ -155,5 +149,5 @@ def get_field_names(self, declared_fields, info): field = declared_fields[field_name] if field_name not in meta_fields: declared[field_name] = field - return super(ModelSerializer, self).get_field_names(declared, info) - + fields = super(ModelSerializer, self).get_field_names(declared, info) + return list(fields) + list(getattr(self.Meta, 'meta_fields', list()))