Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Django LDP
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
20
Issues
20
List
Boards
Labels
Milestones
Merge Requests
5
Merge Requests
5
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Startin blox
djangoldp-packages
Django LDP
Commits
a41f7dcc
Commit
a41f7dcc
authored
Sep 02, 2019
by
Jean-Baptiste
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: Allow non-QuerySet on virtual field
parent
ff08cdcc
Pipeline
#5182
passed with stage
in 1 minute and 21 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
37 additions
and
21 deletions
+37
-21
djangoldp/serializers.py
djangoldp/serializers.py
+20
-16
djangoldp/tests/models.py
djangoldp/tests/models.py
+4
-1
djangoldp/tests/tests_get.py
djangoldp/tests/tests_get.py
+13
-0
djangoldp/tests/tests_temp.py
djangoldp/tests/tests_temp.py
+0
-4
No files found.
djangoldp/serializers.py
View file @
a41f7dcc
...
...
@@ -269,23 +269,27 @@ class LDPSerializer(HyperlinkedModelSerializer):
def
build_property_field
(
self
,
field_name
,
model_class
):
class
JSonLDPropertyField
(
ReadOnlyField
):
def
to_representation
(
self
,
instance
):
from
djangoldp.views
import
LDPViewSet
try
:
model_class
=
instance
.
model
except
:
model_class
=
instance
.
__class__
serializer_generator
=
LDPViewSet
(
model
=
model_class
,
lookup_field
=
Model
.
get_meta
(
model_class
,
'lookup_field'
,
'pk'
),
permission_classes
=
Model
.
get_meta
(
model_class
,
'permission_classes'
,
[
LDPPermissions
]),
fields
=
Model
.
get_meta
(
model_class
,
'serializer_fields'
,
[]),
nested_fields
=
Model
.
get_meta
(
model_class
,
'nested_fields'
,
[]))
parent_depth
=
max
(
getattr
(
self
.
parent
.
Meta
,
"depth"
,
0
)
-
1
,
0
)
serializer_generator
.
depth
=
parent_depth
serializer
=
serializer_generator
.
build_read_serializer
()(
context
=
self
.
parent
.
context
)
if
parent_depth
is
0
:
serializer
.
Meta
.
fields
=
[
"@id"
]
if
isinstance
(
instance
,
QuerySet
):
data
=
list
(
instance
)
model_class
=
instance
.
model
from
djangoldp.views
import
LDPViewSet
serializer_generator
=
LDPViewSet
(
model
=
model_class
,
lookup_field
=
Model
.
get_meta
(
model_class
,
'lookup_field'
,
'pk'
),
permission_classes
=
Model
.
get_meta
(
model_class
,
'permission_classes'
,
[
LDPPermissions
]),
fields
=
Model
.
get_meta
(
model_class
,
'serializer_fields'
,
[]),
nested_fields
=
Model
.
get_meta
(
model_class
,
'nested_fields'
,
[]))
parent_depth
=
max
(
getattr
(
self
.
parent
.
Meta
,
"depth"
,
0
)
-
1
,
0
)
serializer_generator
.
depth
=
parent_depth
serializer
=
serializer_generator
.
build_read_serializer
()(
context
=
self
.
parent
.
context
)
if
parent_depth
is
0
:
serializer
.
Meta
.
fields
=
[
"@id"
]
return
{
'@id'
:
'{}{}{}/'
.
format
(
settings
.
SITE_URL
,
'{}{}/'
,
self
.
source
),
'@type'
:
'ldp:Container'
,
'ldp:contains'
:
[
serializer
.
to_representation
(
item
)
if
item
is
not
None
else
None
for
item
...
...
@@ -294,7 +298,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
[
'view'
,
'add'
])
}
else
:
return
instance
return
serializer
.
to_representation
(
instance
)
field_class
=
JSonLDPropertyField
field_kwargs
=
{}
...
...
djangoldp/tests/models.py
View file @
a41f7dcc
...
...
@@ -32,12 +32,15 @@ class JobOffer(Model):
def
recent_skills
(
self
):
return
self
.
skills
.
filter
(
date__gte
=
date
.
today
())
def
some_skill
(
self
):
return
self
.
skills
.
all
()
.
first
()
class
Meta
:
anonymous_perms
=
[
'view'
]
authenticated_perms
=
[
'inherit'
,
'change'
,
'add'
]
owner_perms
=
[
'inherit'
,
'delete'
,
'control'
]
nested_fields
=
[
"skills"
]
serializer_fields
=
[
"@id"
,
"title"
,
"skills"
,
"recent_skills"
,
"resources"
]
serializer_fields
=
[
"@id"
,
"title"
,
"skills"
,
"recent_skills"
,
"resources"
,
"slug"
,
"some_skill"
]
container_path
=
"job-offers/"
lookup_field
=
'slug'
...
...
djangoldp/tests/tests_get.py
View file @
a41f7dcc
...
...
@@ -62,3 +62,16 @@ class TestGET(APITestCase):
self
.
assertIn
(
'recent_jobs'
,
response
.
data
)
self
.
assertEqual
(
response
.
data
[
'recent_jobs'
][
'@id'
],
"http://happy-dev.fr/skills/1/recent_jobs/"
)
def
test_get_virtual_field
(
self
):
skill
=
Skill
.
objects
.
create
(
title
=
"Java"
,
obligatoire
=
"ok"
,
slug
=
"1"
)
skill2
=
Skill
.
objects
.
create
(
title
=
"Java"
,
obligatoire
=
"ok"
,
slug
=
"2"
)
job
=
JobOffer
.
objects
.
create
(
title
=
"job"
,
slug
=
"1"
)
job
.
skills
.
add
(
skill
)
job
.
skills
.
add
(
skill2
)
job
.
save
()
response
=
self
.
client
.
get
(
'/job-offers/{}/'
.
format
(
job
.
slug
),
content_type
=
'application/ld+json'
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertIn
(
'some_skill'
,
response
.
data
)
self
.
assertEqual
(
response
.
data
[
'some_skill'
][
'@id'
],
"http://testserver/skills/1/"
)
djangoldp/tests/tests_temp.py
View file @
a41f7dcc
import
json
from
django.contrib.auth.models
import
User
from
django.test
import
TestCase
from
rest_framework.test
import
APIRequestFactory
,
APIClient
from
djangoldp.tests.models
import
Resource
class
TestTemp
(
TestCase
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment