ListCreateAPIView对象没有属性' _default_manager'

时间:2015-02-06 19:43:32

标签: python django web django-rest-framework

我有这些序列化器:

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

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

和这个观点:

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)

并在我的urls文件中添加如下:

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

此模型:

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)   

现在每当我打电话/门票/我得到:

AttributeError at /tickets/

type object 'Tickets' has no attribute '_default_manager'

我想知道它是怎么回事。 我想要的是两个Serializer,所以我可以发送数据" flat"和ForeignKeys一样,但是使用deep = 2的所有数据检索它们。

修改 TraceBack:

  

环境:

     

请求方法:GET请求网址:http://localhost:8000/tickets/

     

Django版本:1.7.1 Python版本:3.4.2已安装的应用程序:   (' django.contrib.admin',' django.contrib.auth',   ' django.contrib.contenttypes',' django.contrib.sessions',   ' django.contrib.messages',' django.contrib.staticfiles',' server',   ' rest_framework',' rest_framework.authtoken')已安装的中间件:   (' django.contrib.sessions.middleware.SessionMiddleware&#39 ;,   ' django.middleware.common.CommonMiddleware&#39 ;,   ' django.contrib.auth.middleware.AuthenticationMiddleware&#39 ;,   ' django.contrib.messages.middleware.MessageMiddleware&#39 ;,   ' django.middleware.clickjacking.XFrameOptionsMiddleware&#39)

     

回溯:文件   " /usr/lib/python3.4/site-packages/django/core/handlers/base.py"在   get_response     111. response = wrapped_callback(request,* callback_args,** callback_kwargs)File" /usr/lib/python3.4/site-packages/django/views/decorators/csrf.py"在   wrapped_view     57. return view_func(* args,** kwargs)File" /usr/lib/python3.4/site-packages/django/views/generic/base.py"在   视图     69. return self.dispatch(request,* args,** kwargs)File" /usr/lib/python3.4/site-packages/rest_framework/views.py"在发货     403. response = self.handle_exception(exc)File" /usr/lib/python3.4/site-packages/rest_framework/views.py"在发货     400.response = handler(request,* args,** kwargs)File" /usr/lib/python3.4/site-packages/rest_framework/generics.py"在得到     493. return self.list(request,* args,** kwargs)File" /usr/lib/python3.4/site-packages/rest_framework/mixins.py"在列表中     76. self.object_list = self.filter_queryset(self.get_queryset())文件   " /usr/lib/python3.4/site-packages/rest_framework/generics.py"在   get_queryset     296. return self.model._default_manager.all()

     

异常类型:/ tickets / Exception中的AttributeError值:类型   对象'门票'没有属性' _default_manager'

1 个答案:

答案 0 :(得分:5)

您设置了model=Tickets,但Tickets是您的观点,而不是您的模型。

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

改为使用

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