压倒性目标类型_

2024-09-24 06:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下资源,我正在尝试覆盖obj_create。如果我不重写它,一切都会很好地工作,但是当我覆盖它时,它会给出一个POST错误。有线索吗?我真的很感谢你的回答,不过我相信Tastype最近在堆栈溢出问题上没有得到任何答案。。这很烦人。我也在考虑换我的堆栈出于同样的原因。。在

代码如下:

class OrderResource(BackBoneCompatibleResource):
  person = fields.ToOneField(PersonResource, 'person', full=True)
  restaurant = fields.ToOneField(RestaurantResource, 'restaurant', full=True)
  itemList = fields.ToManyField(OrderItemResource, 'itemList', full=True)

  class Meta:
    object_class = Order
    queryset = Order.objects.all().order_by("-time_updated")
    resource_name = 'order'
    allowed_methods = ['get','post','put','delete','patch']
    authorization = Authorization()
    serializer = Serializer(formats=['json', 'jsonp', 'xml', 'yaml', 'html', 'plist'])
    authentication = ClientAuthentication()
    authorization = OrderAuthorization()
    always_return_data = True
    filtering = {
        "restaurant" : ["exact"],
        "time_created" : ["gte"],
        "person" : ["exact"]
    }

  def obj_create(self, bundle, request=None, **kwargs):
    print "Entered Order Create"
    return super(OrderResource, self).obj_create(bundle, request, **kwargs)

订单模型是:

^{pr2}$

如前所述,如果我从资源中删除obj_create()函数,post就会正常进行。我无法理解我做了什么错事,我只是按照文档中指定的方式编写默认函数?我可能错过了一些很明显的东西。谢谢你的时间。。在

我得到的具体错误如下,但不确定它是否有帮助。。在

<type 'exceptions.TypeError'>, TypeError('obj_create() takes exactly 2 arguments (3 given)',), <traceback object at 0x10d30fb90>

Tags: trueobjfields堆栈错误createorder资源
2条回答

更改此行:

return super(OrderResource, self).obj_create(bundle, request, **kwargs)

为此:

^{pr2}$

requestmust be passed as a keyword argument。在

当您调用super().obj_create时,您正在向父方法传递它不期望的参数。错误消息告诉您出了什么问题,当您查看documentation中的父方法时,它是有意义的。它捕捉到**kwargs,但是看怎么没有{}?这意味着它无法处理传递给它的request参数。在

Resource.obj_create(self, bundle, **kwargs)  # Tastypie 

我建议您使用相同的方法签名在子类上定义obj_create,这样就不会混淆调用方的期望。父对象没有显式地处理request,因此您也不应该这样做。最终代码:

^{pr2}$

相关问题 更多 >