Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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/24.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 Django自定义保存方法:至少接受3个参数(给定2个)_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django自定义保存方法:至少接受3个参数(给定2个)

Python Django自定义保存方法:至少接受3个参数(给定2个),python,django,django-rest-framework,Python,Django,Django Rest Framework,我对Django中模型的自定义保存方法有一个问题。 返回的错误为: Traceback (most recent call last): File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response response = wrapped_callback(request, *callb

我对Django中模型的自定义保存方法有一个问题。 返回的错误为:

    Traceback (most recent call last):
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/viewsets.py", line 78, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 57, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/views.py", line 399, in dispatch
    response = self.handle_exception(exc)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/views.py", line 396, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/mixins.py", line 52, in create
    self.object = serializer.save(force_insert=True)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/serializers.py", line 560, in save
    self.save_object(self.object, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/serializers.py", line 935, in save_object
    obj.save(**kwargs)
TypeError: save() takes at least 3 arguments (2 given)
这里使用的模型如下。这个想法是一种用于酒瓶的ERP,它可以填充用户的酒窖(酒窖)。 一个瓶子有4个外键:1个用户键、1个葡萄酒键和两个移动键,用于定义瓶子所在的位置以及是否已被评为(=醉酒)

瓶子的自定义保存方法如下所示。当我试图在Django Rest API中创建一个新瓶子时,会发生错误

这个save函数的特殊性是创建一个移动对象,瓶子有一个ForeignKey,带有save函数的user和wine参数

def save(self, wine, user, force_insert=True, *args, **kwargs):
    d = datetime.now()
    self.wine = wine #wine referencing issue
    self.user = user
    v = Container.objects.get(container_type='vinibar', user=user)
    c = Container.objects.get(container_type='cellar', user=admin) 
    m = Movement(date=d, start=c, finish=v) #quantity=quantity?
    self.mounted = m
    self.date_mounted = d
    super(Bottle, self).save(*args, **kwargs)
我不明白这个错误指的是哪一个论点,我已经用尽了我所能想到的一切

提前感谢您的帮助:)

您的
save()
方法至少需要三个参数:
self
wine
user

def save(self, wine, user, force_insert=True, *args, **kwargs):
这意味着当
kwargs
只包含一个值时,Django REST框架无法调用
save()
,如下所示:

obj.save(**kwargs)
您需要将
save()
的签名更改为:

def save(self, *args, **kwargs):

然后,您可以从
args
kwargs
获取
wine
user
和其他参数的值(如果它们恰好由Django REST框架传递)。

我注意到,在将装入的变量分配给self.mounted时,它没有定义

self.mounted = mounted

修复它有帮助吗?

什么是堆栈跟踪?调用
save
@simeonviser的实际代码在哪里?我已经添加了堆栈跟踪。save方法直接在Django Rest Framework API中,该API创建通用视图集来创建和编辑模型,非常感谢您的快速回答。我的问题是,需要在保存对象之前创建挂载的移动对象。在哪一点上我应该给super.save()函数上面计算的参数?谢谢,它在最初的代码中,但为了测试我已经删除了它。它确实需要在那里,但它不能解决问题
self.mounted = mounted