Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tastypie覆盖对象创建_Python_Django_Tastypie - Fatal编程技术网

Python Tastypie覆盖对象创建

Python Tastypie覆盖对象创建,python,django,tastypie,Python,Django,Tastypie,我有以下资源,我正在尝试覆盖obj_create。如果我不重写它,事情就会完美地工作,但是当我重写它时,它会给出一个POST错误。有线索吗?如果您能给我一个答案,我将不胜感激,尽管我相信tastypie最近在堆栈溢出问题上并没有得到任何答案。。这很烦人。出于同样的原因,我正在考虑切换堆栈 代码如下: class OrderResource(BackBoneCompatibleResource): person = fields.ToOneField(PersonResource, 'pers

我有以下资源,我正在尝试覆盖obj_create。如果我不重写它,事情就会完美地工作,但是当我重写它时,它会给出一个POST错误。有线索吗?如果您能给我一个答案,我将不胜感激,尽管我相信tastypie最近在堆栈溢出问题上并没有得到任何答案。。这很烦人。出于同样的原因,我正在考虑切换堆栈

代码如下:

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)
订单模式为:

class Order(models.Model):
  restaurant = models.ForeignKey(Restaurant)
  person = models.ForeignKey(Person)
  tableNumber = models.CharField(max_length=2)
  PLACED = 'p'
  ACCEPTED = 'a'
  READY = 'r'
  ORDER_STATUS_CHOICES = (
    (PLACED, 'Placed'),
    (ACCEPTED, 'Accepted'),
    (READY, 'Ready'),
  ) 
  order_status = models.CharField(max_length=1, choices=ORDER_STATUS_CHOICES, default=PLACED)
  itemList = models.ManyToManyField(OrderItem, null=True)
  tax = models.FloatField()
  tip = models.FloatField()
  cost = models.FloatField()
  time_created = models.DateTimeField(auto_now_add=True)
  time_updated = models.DateTimeField(auto_now=True)
正如我所说的,如果我从资源中删除obj_create函数,post就会正常进行。我无法理解仅仅编写文档中指定的默认函数是什么错误?我可能遗漏了一些非常明显的东西。谢谢你抽出时间

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

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

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

return super(OrderResource, self).obj_create(bundle, request=request, **kwargs)
请求。

更改此行:

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

return super(OrderResource, self).obj_create(bundle, request=request, **kwargs)
请求。

调用super.obj_create时,您正在向父方法传递一个它不期望的参数。错误消息告诉您出了什么问题,当您在中查看父方法时,它是有意义的。它捕捉到**夸格,但看到没有*args了吗?这意味着它无法处理您传递的请求参数

Resource.obj_create(self, bundle, **kwargs)  # Tastypie 
我建议您使用相同的方法签名在子类上定义obj_create,这样就不会混淆调用者的期望。父级没有显式地处理请求,因此您也不应该这样做。最终代码:

class OrderResource(BackBoneCompatibleResource):
    def obj_create(self, bundle, **kwargs):
        print "Entered Order Create"
        return super(OrderResource, self).obj_create(bundle, **kwargs)
当您调用super.obj_create时,您正在向父方法传递一个它不期望的参数。错误消息告诉您出了什么问题,当您在中查看父方法时,它是有意义的。它捕捉到**夸格,但看到没有*args了吗?这意味着它无法处理您传递的请求参数

Resource.obj_create(self, bundle, **kwargs)  # Tastypie 
我建议您使用相同的方法签名在子类上定义obj_create,这样就不会混淆调用者的期望。父级没有显式地处理请求,因此您也不应该这样做。最终代码:

class OrderResource(BackBoneCompatibleResource):
    def obj_create(self, bundle, **kwargs):
        print "Entered Order Create"
        return super(OrderResource, self).obj_create(bundle, **kwargs)

错误是什么?发布完整的回溯。我得到以下错误,我不知道这有多具体或有多大帮助,TypeError'obj_create正好接受2个参数3给定',有人吗?我一直在努力解决这个问题,似乎是个小问题。有什么错误吗?发布完整的回溯。我得到以下错误,我不知道这有多具体或有多大帮助,TypeError'obj_create正好接受2个参数3给定',有人吗?我一直在努力解决这个问题,似乎是个小问题。谢谢凯文和杰科顿。这很有帮助。不知何故,我为obj_create找到的所有早期来源都指定了3个参数,但是,谢谢,我现在更了解这一点了!!看起来请求参数在一个月内消失了。别忘了给有用的答案投票=谢谢@JCotton。是的,我投了更高的票。我之前试图同时选中这两个复选框,因为它们都很有用,但不幸的是堆栈溢出只允许1个复选框!顺便说一句,你能帮我回答这个问题吗。。在堆栈溢出的问题上,我经常很难得到关于Tastype的回答,而且在Tastype上的开发工作已经有一段时间有点慢了。。您个人会推荐我切换到Django rest框架,或者使用烧瓶/瓶子,或者任何其他更可靠的建议,或者tastypie已经足够好了?好问题。Django Rest框架当然有很多优势。如果我开始一个新项目,我会用它。在过去的两个相当大的项目中,我毫无问题地使用了tastype。我喜欢Tastypie,但它已经慢了下来,并没有达到1.0,而现在它真的应该达到1.0。如果你在Tastypie上投入了大量资金,只要它能满足你的需求,我看不出有任何必要切换。如果开始一些新的或者需要其他的特点,DRF是最好的选择。谢谢JCotton。我真的很重视这个建议。是的,到现在为止,我已经在Tastypie上投入了很多!但是,一旦我能找到更多的资源,我将继续向DRF开放!谢谢凯文和杰科顿。这很有帮助。不知何故,我为obj_create找到的所有早期来源都指定了3个参数,但是,谢谢,我现在更了解这一点了!!看起来请求参数在一个月内消失了。别忘了给有用的答案投票=谢谢@JCotton。是的,我投了更高的票。我之前试图同时选中这两个复选框,因为它们都很有用,但不幸的是堆栈溢出只允许1个复选框!顺便说一句,你能帮我回答这个问题吗。。在堆栈溢出的问题上,我经常很难得到关于Tastype的回答,而且在Tastype上的开发工作已经有一段时间有点慢了。。您个人会推荐我切换到Django rest框架,或者使用烧瓶/瓶子,或者任何其他更可靠的建议,或者tastypie已经足够好了?好问题。Django Rest框架当然有很多优势。如果我开始一个新项目,我会用它。两个相当大的过去公关
ojects,我使用Tastypie没有问题。我喜欢Tastypie,但它已经慢了下来,并没有达到1.0,而现在它真的应该达到1.0。如果你在Tastypie上投入了大量资金,只要它能满足你的需求,我看不出有任何必要切换。如果开始一些新的或者需要其他的特点,DRF是最好的选择。谢谢JCotton。我真的很重视这个建议。是的,到现在为止,我已经在Tastypie上投入了很多!但是,一旦我能找到更多的资源,我将继续向DRF开放!