16
16
# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
#
18
18
#########################################################################
19
- import json
19
+ import logging
20
20
from slugify import slugify
21
21
from urllib .parse import urljoin
22
+ import json
22
23
23
24
from django .db .models import Q
24
25
from django .conf import settings
25
26
from django .contrib .auth .models import Group
26
27
from django .forms .models import model_to_dict
27
28
from django .contrib .auth import get_user_model
28
29
from django .db .models .query import QuerySet
30
+ from django .http import QueryDict
29
31
30
32
from rest_framework import serializers
31
33
from rest_framework_gis import fields
51
53
ExtraMetadata ,
52
54
)
53
55
from geonode .groups .models import GroupCategory , GroupProfile
54
-
56
+ from geonode . base . api . fields import ComplexDynamicRelationField
55
57
from geonode .utils import build_absolute_uri
56
58
from geonode .security .utils import get_resources_with_perms
57
59
from geonode .resource .models import ExecutionRequest
58
60
59
- import logging
60
-
61
61
logger = logging .getLogger (__name__ )
62
62
63
63
@@ -351,9 +351,6 @@ class Meta:
351
351
model = ResourceBase
352
352
fields = ("pk" , "blob" )
353
353
354
- def to_internal_value (self , data ):
355
- return data
356
-
357
354
def to_representation (self , value ):
358
355
data = ResourceBase .objects .filter (id = value )
359
356
if data .exists () and data .count () == 1 :
@@ -444,7 +441,7 @@ def __init__(self, *args, **kwargs):
444
441
self .fields ["bbox_polygon" ] = fields .GeometryField (read_only = True , required = False )
445
442
self .fields ["ll_bbox_polygon" ] = fields .GeometryField (read_only = True , required = False )
446
443
self .fields ["srid" ] = serializers .CharField (required = False )
447
- self .fields ["group" ] = DynamicRelationField (GroupSerializer , embed = True , many = False )
444
+ self .fields ["group" ] = ComplexDynamicRelationField (GroupSerializer , embed = True , many = False )
448
445
self .fields ["popular_count" ] = serializers .CharField (required = False )
449
446
self .fields ["share_count" ] = serializers .CharField (required = False )
450
447
self .fields ["rating" ] = serializers .CharField (required = False )
@@ -463,28 +460,27 @@ def __init__(self, *args, **kwargs):
463
460
self .fields ["processed" ] = serializers .BooleanField (read_only = True )
464
461
self .fields ["state" ] = serializers .CharField (read_only = True )
465
462
self .fields ["sourcetype" ] = serializers .CharField (read_only = True )
466
-
467
463
self .fields ["embed_url" ] = EmbedUrlField (required = False )
468
464
self .fields ["thumbnail_url" ] = ThumbnailUrlField (read_only = True )
469
- self .fields ["keywords" ] = DynamicRelationField (SimpleHierarchicalKeywordSerializer , embed = False , many = True )
470
- self .fields ["tkeywords" ] = DynamicRelationField (SimpleThesaurusKeywordSerializer , embed = False , many = True )
465
+ self .fields ["keywords" ] = ComplexDynamicRelationField (
466
+ SimpleHierarchicalKeywordSerializer , embed = False , many = True
467
+ )
468
+ self .fields ["tkeywords" ] = ComplexDynamicRelationField (SimpleThesaurusKeywordSerializer , embed = False , many = True )
471
469
self .fields ["regions" ] = DynamicRelationField (SimpleRegionSerializer , embed = True , many = True , read_only = True )
472
- self .fields ["category" ] = DynamicRelationField (SimpleTopicCategorySerializer , embed = True , many = False )
473
- self .fields ["restriction_code_type" ] = DynamicRelationField (
470
+ self .fields ["category" ] = ComplexDynamicRelationField (SimpleTopicCategorySerializer , embed = True , many = False )
471
+ self .fields ["restriction_code_type" ] = ComplexDynamicRelationField (
474
472
RestrictionCodeTypeSerializer , embed = True , many = False
475
473
)
476
- self .fields ["license" ] = DynamicRelationField (LicenseSerializer , embed = True , many = False )
477
- self .fields ["spatial_representation_type" ] = DynamicRelationField (
474
+ self .fields ["license" ] = ComplexDynamicRelationField (LicenseSerializer , embed = True , many = False )
475
+ self .fields ["spatial_representation_type" ] = ComplexDynamicRelationField (
478
476
SpatialRepresentationTypeSerializer , embed = True , many = False
479
477
)
480
478
self .fields ["blob" ] = serializers .JSONField (required = False , write_only = True )
481
479
self .fields ["is_copyable" ] = serializers .BooleanField (read_only = True )
482
-
483
480
self .fields ["download_url" ] = DownloadLinkField (read_only = True )
484
-
485
481
self .fields ["favorite" ] = FavoriteField (read_only = True )
486
482
487
- metadata = DynamicRelationField (ExtraMetadataSerializer , embed = False , many = True , deferred = True )
483
+ metadata = ComplexDynamicRelationField (ExtraMetadataSerializer , embed = False , many = True , deferred = True )
488
484
489
485
class Meta :
490
486
model = ResourceBase
@@ -596,6 +592,8 @@ def to_internal_value(self, data):
596
592
data = json .loads (data )
597
593
if "data" in data :
598
594
data ["blob" ] = data .pop ("data" )
595
+ if isinstance (data , QueryDict ):
596
+ data = data .dict ()
599
597
data = super (ResourceBaseSerializer , self ).to_internal_value (data )
600
598
return data
601
599
0 commit comments