Tastypie:create_response()期间出错

时间:2014-03-26 14:12:42

标签: django tastypie

当我尝试覆盖obj_create时,我收到一条错误消息,我不明白为什么。

以下是代码:

在api.py中:

class CardInfoResource(ModelResource):

    linked_client = fields.ForeignKey(ClientInfoResource, 'linked_client',
        blank=True, null=True, full=True)

    class Meta(CommonResourceMeta):
        queryset = Card.objects.all()
        resource_name = 'card_infos'
        fields = ['custom_pk']
        list_allowed_methods = ['post']
        detail_allowed_methods = ['post']
        authentication = ApiKeyAuthentication()

    def obj_create(self, bundle, request=None, **kwargs):
        # some stuff
        mydata = {'foo':'bar'}
        return self.create_response(request, mydata)

当向带有一些数据的有效负载发送POST请求到myAPI / card_infos /时(在上面的示例中未使用),我得到一个json:

  • error_message:NoneType'对象没有属性'GET'
  • 回溯(我不打算粘贴完整的堆栈,在create_response()上发生错误,负责的方法是determine_format():if request.GET.get(\'format \'):\ n \ n属性错误:\'NoneType \'对象没有属性\'GET \'\ n')

似乎该错误与Request=None定义中的obj_create有关,但仍然不知道如何修复它。

我的目的看起来很奇怪,但我只是想在不将数据写入数据库的情况下发布一些数据。这就是我在重写obj_create()方法中使用一些数据调用create_response的原因。不确定这是一个干净的方式...

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在对没有该属性的对象调用.GET。我们可以从回溯中看到这个对象是None单例,我们可以看到它没有内置dir().GET属性。

>>> dir(None)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__',     '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

obj_create()中,如果没有传递请求关键字参数,则关键字参数request默认为None

所以我希望您调用该方法而不是将HttpRequest对象作为kwarg传递,这意味着我们将None传递给create_response()函数。这可能期望传递的request变量是具有.GET属性的HttpRequest对象 - 但是因为它不是AttributeError引发的。