From b0ad5138385495209cf413d1373d56aa56685ee6 Mon Sep 17 00:00:00 2001
From: Calum Mackervoy <c.mackervoy@gmail.com>
Date: Wed, 18 Mar 2020 12:35:39 +0000
Subject: [PATCH] Minor: updated resolve_fk_instances

---
 djangoldp/serializers.py | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 3a19bbf3..96db6975 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -598,17 +598,26 @@ class LDPSerializer(HyperlinkedModelSerializer):
                 continue
             slug_field = Model.slug_field(field_model)
             sub_inst = None
-            if slug_field in field_dict:
+            if 'urlid' in field_dict:
+                # has urlid and is a local resource
+                if parse.urlparse(settings.BASE_URL).netloc == parse.urlparse(field_dict['urlid']).netloc:
+                    # try slug field if it exists
+                    if slug_field in field_dict:
+                        kwargs = {slug_field: field_dict[slug_field]}
+                        sub_inst = field_model.objects.get(**kwargs)
+                    else:
+                        model, sub_inst = Model.resolve(field_dict['urlid'])
+                # remote resource - get backlinked copy
+                elif hasattr(field_model, 'urlid'):
+                    kwargs = {'urlid': field_dict['urlid']}
+                    sub_inst = field_model.objects.get(**kwargs)
+                elif issubclass(field_model, AbstractUser):
+                    kwargs = {'username': field_dict['urlid']}
+                    sub_inst = field_model.objects.get(**kwargs)
+            # try slug field, assuming that this is a local resource
+            elif slug_field in field_dict:
                 kwargs = {slug_field: field_dict[slug_field]}
                 sub_inst = field_model.objects.get(**kwargs)
-            elif 'urlid' in field_dict and settings.BASE_URL in field_dict['urlid']:
-                model, sub_inst = Model.resolve(field_dict['urlid'])
-            elif 'urlid' in field_dict and issubclass(field_model, AbstractUser):
-                kwargs = {'username': field_dict['urlid']}
-                sub_inst = field_model.objects.get(**kwargs)
-            elif 'urlid' in field_dict:
-                kwargs = {'urlid': field_dict['urlid']}
-                sub_inst = field_model.objects.get(**kwargs)
             if sub_inst is None:
                 sub_inst = self.internal_create(field_dict, field_model)
             validated_data[field_name] = sub_inst
-- 
GitLab