From b02da1067fb821b1a3af8a328a62187ae2828ea5 Mon Sep 17 00:00:00 2001
From: Rob Atkinson <rob@metalinkage.com.au>
Date: Mon, 5 Nov 2018 12:08:46 +1100
Subject: [PATCH] Support default serialiser fields for all cases, remove
 redundant field filtering.

---
 README.md                |  3 +++
 djangoldp/serializers.py | 10 ++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 0f0d2fc7..26ec8319 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,7 @@ class Todo(models.Model):
 
 ```
 
+#### 3.1 Configure field visibility (optional) 
 Note that at this stage you can limit access to certain fields of models using
 
 ```
@@ -53,6 +54,8 @@ from django.contrib.auth.models import User
 User._meta.serializer_fields  = ('username','first_name','last_name')
 ```
 
+Note that this will be overridden if you explicitly set the fields= parameter as an argument to LDPViewSet.urls(), and filtered if you set the excludes= parameter.
+
 ### 4- Add a url in your urls.py:
 
 ```
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 716a181d..e0ba2de1 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -81,10 +81,12 @@ class LDPSerializer(HyperlinkedModelSerializer):
     serializer_url_field = JsonLdIdentityField
     
     def get_default_field_names(self, declared_fields, model_info):
-        fields = super().get_default_field_names(declared_fields, model_info)
-        excludes = list(getattr(self.Meta, 'exclude', []))
-        extra = list(getattr(self.Meta, 'extra_fields', []))
-        return [f for f in fields if f not in excludes] + extra
+        try:
+            fields = list(self.Meta.model._meta.serializer_fields)
+        except:
+            fields = super().get_default_field_names(declared_fields, model_info)
+
+        return fields
     
     def to_representation(self, obj):
         data = super().to_representation(obj)
-- 
GitLab