1

I have these serializers:

# Tickets
class TicketSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ticket
        depth = 2

class TicketWriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ticket

and this view:

class Tickets(generics.ListCreateAPIView):
  model = Ticket
  serializer_class = TicketSerializer

  def create(self, request, *args, **kwargs):
    serializer = TicketWriteSerializer(data=request.DATA, files=request.FILES)
    if serializer.is_valid():
      self.pre_save(serializer.object)
      self.object = serializer.save(force_insert=True)
      self.post_save(self.object, created=True)
      headers = self.get_success_headers(serializer.data)
      serializer = TicketSerializer(serializer.object)
      return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

and in my urls-file I add it like this:

  url(r'^tickets/', Tickets.as_view(model=Tickets), name='tickets')

for this model:

class Ticket(models.Model):
    customer = models.ForeignKey('Customer', null=True, blank=True)
    act = models.ForeignKey('Act')
    row = models.PositiveIntegerField()
    seat = models.PositiveIntegerField()
    # Price for a seat can go up to 9999.99
    price = models.DecimalField(max_digits=6, decimal_places=2)
    status = models.CharField(max_length=255)   

Now whenever I call /tickets/ I get:

AttributeError at /tickets/

type object 'Tickets' has no attribute '_default_manager'

I'm wondering how it comes to that. What I want is two Serializers so I can send the data "flat" like with ForeignKeys but retrieve them with all their data of depth = 2.

edit: TraceBack:

Environment:

Request Method: GET Request URL: http://localhost:8000/tickets/

Django Version: 1.7.1 Python Version: 3.4.2 Installed Applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'server', 'rest_framework', 'rest_framework.authtoken') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

Traceback: File "/usr/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3.4/site-packages/django/views/decorators/csrf.py" in wrapped_view 57. return view_func(*args, **kwargs) File "/usr/lib/python3.4/site-packages/django/views/generic/base.py" in view 69. return self.dispatch(request, *args, **kwargs) File "/usr/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 403. response = self.handle_exception(exc) File "/usr/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 400. response = handler(request, *args, **kwargs) File "/usr/lib/python3.4/site-packages/rest_framework/generics.py" in get 493. return self.list(request, *args, **kwargs) File "/usr/lib/python3.4/site-packages/rest_framework/mixins.py" in list 76. self.object_list = self.filter_queryset(self.get_queryset()) File "/usr/lib/python3.4/site-packages/rest_framework/generics.py" in get_queryset 296. return self.model._default_manager.all()

Exception Type: AttributeError at /tickets/ Exception Value: type object 'Tickets' has no attribute '_default_manager'

2
  • Can you post the entire stacktrace? Commented Feb 6, 2015 at 19:51
  • @TimmyO'Mahony: Added the traceback I get in the browser, none in the console but a: "GET /tickets/ HTTP/1.1" 500 90211. Hope this helps! Commented Feb 6, 2015 at 19:53

1 Answer 1

7

You set model=Tickets but Tickets is your view, not your model.

url(r'^tickets/', Tickets.as_view(model=Tickets), name='tickets')

Use this instead

url(r'^tickets/', Tickets.as_view(model=Ticket), name='tickets')
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you so much! Now all I'm missing is /tickets/{id}/ to only give me the ticket with id... currently it returns all of them. And I'd like to register this with the router as well, not sure how to do that tho. Again, thanks a bunch!
how can I do Ticket.objects.select_related in this?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.