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

2024-05-04 23:38:55 发布

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

我对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个葡萄酒和两个动作,它们定义了瓶子的位置和是否被评级(=喝醉)

^{pr2}$

瓶子的自定义保存方法如下。当我试图在Django restapi中创建一个新瓶子时,会出现错误

这个save函数的特殊性是创建一个Movement对象,其中瓶子有一个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)

我不明白这个错误指的是哪个论点,我已经尽我所能。。在

提前感谢您的帮助:)


Tags: inpyselfsavelibpackageslinesite
2条回答

我注意到您的挂载变量在分配给自行安装在

self.mounted = mounted

修复它有帮助吗?在

您的save()方法至少需要三个参数:selfwine和{}:

def save(self, wine, user, force_insert=True, *args, **kwargs):

这意味着,当kwargs只包含一个值时,Django REST framework无法按如下方式调用save()

^{pr2}$

您需要将save()的签名更改为:

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

然后,您可以从args和{}获得wineuser和其他参数的值(如果它们恰好是由Django REST框架传递的)。在

相关问题 更多 >