diff --git a/djangorestframework/resources.py b/djangorestframework/resources.py index 12bf23a10..38b6796cf 100644 --- a/djangorestframework/resources.py +++ b/djangorestframework/resources.py @@ -1,3 +1,4 @@ +from django.core.exceptions import ImproperlyConfigured from django import forms from django.core.urlresolvers import reverse, get_urlconf, get_resolver, NoReverseMatch from django.db import models @@ -533,18 +534,37 @@ class ModelResource(FormResource): def get_model(self): """ - Return the model class for this view. + Return the model class for this resource. """ - return getattr(self, 'model', getattr(self.view, 'model', None)) + if hasattr(self, 'model'): + return self.model + elif hasattr(self.view, 'model'): + return self.view.model + else: + raise ImproperlyConfigured(u"%(cls)s is missing a model. Define " + u"%(cls)s.model." % { + 'cls': self.__class__ + }) def get_queryset(self): """ Return the queryset that should be used when retrieving or listing instances. """ - return getattr(self, 'queryset', - getattr(self.view, 'queryset', - self.get_model().objects.all())) + if hasattr(self, 'queryset'): + queryset = self.queryset + elif hasattr (self.view, 'queryset'): + queryset = self.view.queryset + else: + model = self.get_model() + if model: + queryset = model._default_manager.all() + else: + raise ImproperlyConfigured(u"%(cls)s is missing a queryset. Define " + u"%(cls)s.model or %(cls)s.queryset." % { + 'cls': self.__class__ + }) + return queryset._clone() def get_ordering(self): """ diff --git a/djangorestframework/views.py b/djangorestframework/views.py index a3d7d0c37..d77cd8dff 100644 --- a/djangorestframework/views.py +++ b/djangorestframework/views.py @@ -201,10 +201,11 @@ class ListModelView(ListResourceMixin, ModelView): A view which provides default operations for list, against a model in the database. """ + queryset = None _suffix = 'List' -class ListOrCreateModelView(PostResourceMixin, ListResourceMixin, ModelView): +class ListOrCreateModelView(PostResourceMixin, ListModelView, ModelView): """ A view which provides default operations for list and create, against a model in the database.