Skip to content

Commit 858eb89

Browse files
implements a PATCH method, get rid of star imports, pass flake8, update urlpatterns
1 parent 47c1b00 commit 858eb89

File tree

7 files changed

+144
-66
lines changed

7 files changed

+144
-66
lines changed

restless/modelviews.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django.forms.models import modelform_factory
1+
from django.forms.models import modelform_factory, model_to_dict
22

33
from .views import Endpoint
44
from .http import HttpError, Http200, Http201
@@ -11,8 +11,9 @@
1111
def _get_form(form, model):
1212
from django import VERSION
1313

14-
if VERSION[:2] >= (1,8):
15-
mf = lambda m: modelform_factory(m, fields='__all__')
14+
if VERSION[:2] >= (1, 8):
15+
def mf(model):
16+
return modelform_factory(model, fields='__all__')
1617
else:
1718
mf = modelform_factory
1819

@@ -95,7 +96,7 @@ def post(self, request, *args, **kwargs):
9596
if form.is_valid():
9697
obj = form.save()
9798
return Http201(self.serialize(obj))
98-
99+
99100
raise HttpError(400, 'Invalid Data', errors=form.errors)
100101

101102

@@ -120,7 +121,7 @@ class variable.
120121
model = None
121122
form = None
122123
lookup_field = 'pk'
123-
methods = ['GET', 'PUT', 'DELETE']
124+
methods = ['GET', 'PUT', 'PATCH', 'DELETE']
124125

125126
def get_instance(self, request, *args, **kwargs):
126127
"""Return a model instance represented by this endpoint.
@@ -169,6 +170,28 @@ def get(self, request, *args, **kwargs):
169170

170171
return self.serialize(self.get_instance(request, *args, **kwargs))
171172

173+
def patch(self, request, *args, **kwargs):
174+
"""Update the object represented by this endpoint."""
175+
176+
if 'PATCH' not in self.methods:
177+
raise HttpError(405, 'Method Not Allowed')
178+
179+
Form = _get_form(self.form, self.model)
180+
instance = self.get_instance(request, *args, **kwargs)
181+
182+
form_data = model_to_dict(instance)
183+
form_data.update(request.data)
184+
185+
form = Form(
186+
form_data,
187+
request.FILES,
188+
instance=instance
189+
)
190+
if form.is_valid():
191+
obj = form.save()
192+
return Http200(self.serialize(obj))
193+
raise HttpError(400, 'Invalid data', errors=form.errors)
194+
172195
def put(self, request, *args, **kwargs):
173196
"""Update the object represented by this endpoint."""
174197

@@ -177,8 +200,7 @@ def put(self, request, *args, **kwargs):
177200

178201
Form = _get_form(self.form, self.model)
179202
instance = self.get_instance(request, *args, **kwargs)
180-
form = Form(request.data or None, request.FILES,
181-
instance=instance)
203+
form = Form(request.data or None, request.FILES, instance=instance)
182204
if form.is_valid():
183205
obj = form.save()
184206
return Http200(self.serialize(obj))

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def run(self):
3939

4040
setup(
4141
name='DjangoRestless',
42-
version='0.0.10',
42+
version='0.0.11',
4343
author='Senko Rasic',
4444
author_email='[email protected]',
4545
description='A RESTful framework for Django',

testproject/testapp/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from django import forms
22

3-
from .models import *
3+
from .models import Author
44

55
__all__ = ['AuthorForm']
66

0 commit comments

Comments
 (0)