From efbf4502f47af78ed018642e9155c51acbbdd181 Mon Sep 17 00:00:00 2001 From: Calum Mackervoy <c.mackervoy@gmail.com> Date: Mon, 27 Jul 2020 18:45:07 +0200 Subject: [PATCH] minor: upgrade to Django 2.2 --- djangoldp/serializers.py | 22 +++++++++++++++------- djangoldp/views.py | 18 ++++-------------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index e0a62879..62d12c4b 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -3,12 +3,13 @@ from collections import OrderedDict, Mapping, Iterable from typing import Any from urllib import parse +from django.db import transaction from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ValidationError as DjangoValidationError from django.urls import resolve, Resolver404, get_script_prefix -from django.urls import get_resolver +from django.urls.resolvers import get_resolver from django.db.models import QuerySet from django.utils.datastructures import MultiValueDictKeyError from django.utils.encoding import uri_to_iri @@ -629,7 +630,13 @@ class LDPSerializer(HyperlinkedModelSerializer): nested_fk_fields_name = list(filter(lambda key: isinstance(validated_data[key], dict), validated_data)) for field_name in nested_fk_fields_name: field_dict = validated_data[field_name] - field_model = model._meta.get_field(field_name).related_model + try: + field_model = model._meta.get_field(field_name).related_model + print('field_model is ' + str(field_model)) + except: + # not fk + print('except! not FK!') + continue slug_field = Model.slug_field(field_model) sub_inst = None @@ -650,11 +657,12 @@ class LDPSerializer(HyperlinkedModelSerializer): kwargs = {slug_field: field_dict[slug_field]} sub_inst = field_model.objects.get(**kwargs) if sub_inst is None: - if create: - sub_inst = self.internal_create(field_dict, field_model) - else: - continue - + with transaction.atomic(): + try: + sub_inst = self.internal_create(field_dict, field_model) + except: + print('whoops') + validated_data[field_name] = field_dict validated_data[field_name] = sub_inst return validated_data diff --git a/djangoldp/views.py b/djangoldp/views.py index a9c87bd0..98aa3f93 100644 --- a/djangoldp/views.py +++ b/djangoldp/views.py @@ -1,10 +1,11 @@ import json from django.apps import apps from django.conf import settings -from django.conf.urls import re_path, include + +from django.conf.urls import include, re_path from django.contrib.auth import get_user_model from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist -from django.urls import get_resolver +from django.urls.resolvers import get_resolver from django.db import IntegrityError, transaction from django.http import JsonResponse, Http404 from django.shortcuts import get_object_or_404 @@ -333,18 +334,7 @@ class LDPViewSetGenerator(ModelViewSet): # append nested fields to the urls list for field in kwargs.get('nested_fields') or cls.nested_fields: - # the nested property may have a custom viewset defined - try: - nested_model = kwargs['model']._meta.get_field(field).related_model - except FieldDoesNotExist: - nested_model = getattr(kwargs['model'], field).field.model - - if hasattr(nested_model, 'get_view_set'): - kwargs['view_set'] = nested_model.get_view_set() - urls_fct = kwargs['view_set'].nested_urls # our custom view_set may override nested_urls - else: - urls_fct = cls.nested_urls - urls.append(re_path('^' + detail_expr + field + '/', urls_fct(field, **kwargs))) + urls.append(re_path('^' + detail_expr + field + '/', cls.nested_urls(field, **kwargs))) return include(urls) -- GitLab