python - Unable to display annotated queryset in model method in django rest framework viewset -


i trying construct queryset dynamically using model method in doing receiving error in django rest framework v2.4.5 , django 1.7.8:

cannot resolve keyword 'review_count' field. choices are: description, id, name, review

i'm unable display queryset created construct_queryset method in viewset, although works fine in django admin. believe has way django rest framework instantiating models. not entirely sure might causing issue, appreciated, thank you.

i upgraded django 1.8 it's not supported django rest framework v2.4.5 , cannot upgrade v3 @ time unfortunately.

models.py:

class widget (models.model):     name = models.charfield(max_length=255)     description = models.charfield(max_length=255)  class review (models.model):     name = models.charfield(max_length=255)     rating = models.integerfield(         validators=[minvaluevalidator(1), maxvaluevalidator(5)]     )     widget = models.foreignkey(widget)  class widgetqs(models.model):     """ model used constructing dynamic queryset """     order_choices = (         ('annotate_review', 'order review count'),         ...     )     order_by_field = models.charfield(max_length=255, choices=order_choices)      def construct_queryset(self, user=none):         queryset = widget.objects.all()          if self.order_by_field == 'annotate_review':             result_qs = queryset.annotate(                 review_count=count('review')             ).order_by('-review_count')           return result_qs 

serializers.py:

class widgetserializer (serializers.hyperlinkedmodelserializer):     objects = serializers.serializermethodfield('get_objects')      def get_objects(self, obj):         request = self.context.get('request', none)         if request:             try:                 user = request.user             except:                 user = none          qs = obj.construct_queryset(user=user)         if qs:             return qs.values_list('id', flat=true)         return [] 

views.py

class widgetviewset (modelviewset):     serializer_class = widgetqsserializer     queryset = widgetqs.objects.all() 

stack trace

environment:   request method: request url: http://localhost:8080/api/widgetqs  django version: 1.7.8 python version: 2.7.6 installed applications: (u'grappelli',  u'django.contrib.admin',  u'django.contrib.auth',  u'django.contrib.contenttypes',  u'django.contrib.sessions',  u'django.contrib.messages',  u'django.contrib.staticfiles',  u'django.contrib.humanize',  u'corsheaders',  u'rest_framework',  u'social.apps.django_app.default',  u'widget',  u'debug_toolbar') installed middleware: (u'django.contrib.sessions.middleware.sessionmiddleware',  u'django.middleware.common.commonmiddleware',  u'django.middleware.csrf.csrfviewmiddleware',  u'django.contrib.auth.middleware.authenticationmiddleware',  u'django.contrib.auth.middleware.sessionauthenticationmiddleware',  u'django.contrib.messages.middleware.messagemiddleware',  u'django.middleware.clickjacking.xframeoptionsmiddleware',  u'social.apps.django_app.middleware.socialauthexceptionmiddleware',  u'bugsnag.django.middleware.bugsnagmiddleware',  u'debug_toolbar.middleware.debugtoolbarmiddleware')   traceback: file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response   111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view   57.         return view_func(*args, **kwargs) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/viewsets.py" in view   79.             return self.dispatch(request, *args, **kwargs) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/views.py" in dispatch   403.             response = self.handle_exception(exc) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/views.py" in dispatch   400.             response = handler(request, *args, **kwargs) file "/users/nabil/documents/projects/widget_project/widget_project/timestamp/mixins.py" in list   108.             return response(serializer.data) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/serializers.py" in data   576.                 self._data = self.to_native(obj) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/serializers.py" in to_native   355.             value = field.field_to_native(obj, field_name) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/serializers.py" in field_to_native   414.             return [self.to_native(item) item in value.all()] file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/serializers.py" in to_native   355.             value = field.field_to_native(obj, field_name) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/fields.py" in field_to_native   1043.         return self.to_native(value) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/rest_framework/fields.py" in to_native   225.             return [self.to_native(item) item in value] file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/query.py" in __iter__   141.         self._fetch_all() file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all   966.             self._result_cache = list(self.iterator()) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/query.py" in iterator   1202.             row in self.query.get_compiler(self.db).results_iter(): file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in results_iter   701.         rows in self.execute_sql(multi): file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql   776.             sql, params = self.as_sql() file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in as_sql   102.         ordering, o_params, ordering_group_by = self.get_ordering() file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in get_ordering   430.                         self.query.get_meta(), default_order=asc): file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in find_ordering_name   466.         field, targets, alias, joins, path, opts = self._setup_joins(pieces, opts, alias) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in _setup_joins   499.             pieces, opts, alias) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/query.py" in setup_joins   1463.             names, opts, allow_many, fail_on_missing=true) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/query.py" in names_to_path   1427.             self.raise_field_error(opts, name) file "/users/nabil/.virtualenvs/widget_project/lib/python2.7/site-packages/django/db/models/sql/query.py" in raise_field_error   1433.                          "choices are: %s" % (name, ", ".join(available)))  exception type: fielderror @ /api/widgetqs exception value: cannot resolve keyword 'review_count' field. choices are: description, id, name, review 

as can see in function :

def construct_queryset(self, user=none):         queryset = widget.objects.all()          if self.order_by_field == 'annotate_review':             result_qs = queryset.annotate(                 review_count=count('review')             ).order_by('-review_count')           return result_qs 

your queryset is

widget.objects.all()

and trying annotate field has no relation review model. if want work, have add foreignkey model review model widget :

class widget (models.model):     name = models.charfield(max_length=255)     description = models.charfield(max_length=255)  class review (models.model):     widget = models.foreignkey(widget)     name = models.charfield(max_length=255)     rating = models.integerfield(         validators=[minvaluevalidator(1), maxvaluevalidator(5)]     ) 

Comments

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -