当我尝试覆盖obj_create时,我收到一条错误消息,我不明白为什么。
以下是代码:
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:
似乎该错误与Request=None
定义中的obj_create
有关,但仍然不知道如何修复它。
我的目的看起来很奇怪,但我只是想在不将数据写入数据库的情况下发布一些数据。这就是我在重写obj_create()方法中使用一些数据调用create_response的原因。不确定这是一个干净的方式...
感谢您的帮助。
答案 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
引发的。