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