Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
language: python
python: 3.5
sudo: false
install: pip install tox
script: tox
Expand All @@ -25,3 +26,9 @@ env:
- TOXENV=py33-django18-drf32
- TOXENV=py34-django18-drf31
- TOXENV=py34-django18-drf32
- TOXENV=py27-django19-drf31
- TOXENV=py27-django19-drf32
- TOXENV=py34-django19-drf31
- TOXENV=py34-django19-drf32
- TOXENV=py35-django19-drf31
- TOXENV=py35-django19-drf32
2 changes: 1 addition & 1 deletion requirements-development.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-e .
pytest==2.7.2
pytest==2.8.2
pytest-django
pytest-factoryboy
tox
19 changes: 13 additions & 6 deletions rest_framework_json_api/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,19 @@ class JSONAPIMetadata(SimpleMetadata):
serializers.Serializer: 'Serializer',
})

relation_type_lookup = ClassLookupDict({
related.ManyRelatedObjectsDescriptor: 'ManyToMany',
related.ReverseManyRelatedObjectsDescriptor: 'ManyToMany',
related.ForeignRelatedObjectsDescriptor: 'OneToMany',
related.ReverseSingleRelatedObjectDescriptor: 'ManyToOne',
})
try:
relation_type_lookup = ClassLookupDict({
related.ManyToManyDescriptor: 'ManyToMany',
related.ReverseManyToOneDescriptor: 'OneToMany',
related.ForwardManyToOneDescriptor: 'ManyToOne',
})
except AttributeError:
relation_type_lookup = ClassLookupDict({
related.ManyRelatedObjectsDescriptor: 'ManyToMany',
related.ReverseManyRelatedObjectsDescriptor: 'ManyToMany',
related.ForeignRelatedObjectsDescriptor: 'OneToMany',
related.ReverseSingleRelatedObjectDescriptor: 'ManyToOne',
})

def determine_metadata(self, request, view):
metadata = OrderedDict()
Expand Down
8 changes: 7 additions & 1 deletion rest_framework_json_api/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import django
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import NoReverseMatch
from django.db.models import Model
Expand Down Expand Up @@ -85,7 +86,12 @@ def patch(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, model_class=related_model_class, many=True)
serializer.is_valid(raise_exception=True)
related_instance_or_manager.all().delete()
related_instance_or_manager.add(*serializer.validated_data)
# have to set bulk to False since data isn't saved yet
if django.VERSION >= (1, 9):
related_instance_or_manager.add(*serializer.validated_data,
bulk=False)
else:
related_instance_or_manager.add(*serializer.validated_data)
else:
related_model_class = related_instance_or_manager.__class__
serializer = self.get_serializer(data=request.data, model_class=related_model_class)
Expand Down
2 changes: 2 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ envlist =
py{27,32,33}-django16-drf{31,32},
py{27,32,33,34}-django17-drf{31,32},
py{27,32,33,34}-django18-drf{31,32},
py{27,34,35}-django19-drf{31,32},

[testenv]
deps =
django16: Django>=1.6,<1.7
django17: Django>=1.7,<1.8
django18: Django>=1.8,<1.9
django19: Django>=1.9a1
drf31: djangorestframework>=3.1,<3.2
drf32: djangorestframework>=3.2
-r{toxinidir}/requirements-development.txt
Expand Down