diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 3a19bbf35d9d8f8e4aaa4083f53888453ce51428..96db6975fadbd2f400f93ac4d5eac6073d734b2c 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