5

次のようにDjangoモデルのデータを更新したい:

 video_id = request.POST['video_id']
     # Get the form data and update the data

 video = VideoInfoForm(request.POST)

 VideoInfo.objects.filter(id=video_id).update(video)

  return HttpResponseRedirect('/main/')

新しいデータは、フォームでユーザーによって提供されます。でデータを更新したいid=video_id。これにより、次のエラーが発生します。

update() takes exactly 1 argument (2 given)
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
  25.                 return view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
  86.         return handler(request, *args, **kwargs)
File "/home/zurelsoft/virtualenv/videoManagement/VideoManagementSystem/video/views.py" in post
  126.          VideoInfo.objects.filter(id=video_id).update(video)

Exception Type: TypeError at /updateVideo/
Exception Value: update() takes exactly 1 argument (2 given)
4

2 に答える 2

13

関数はupdateキーワード引数のみを取り、ジェネリック引数は取りません。そのため、update() takes exactly 1 argument (2 given)エラー メッセージが表示されます。

試す:

VideoInfo.objects.filter(id=video_id).update(foo=video)

モデルの場所:

class Video(models.Model):
    ...

class VideoInfo(models.Model):
    foo = models.ForeignKey(Video)
    ...

遅延ファンクターによってコメントでリンクされたドキュメントは、関数の署名を示していることに注意してくださいupdate

于 2013-08-05T07:35:10.570 に答える
3

update()引数が 1 つしかないため、フォーム インスタンスを渡すことはできません。詳細はこちらをご覧ください。したがって、1 つのフィールドを更新する場合は、次のようにします。

VideoInfo.objects.filter(id=video_id).update(video_name=request.POST['video_name'])

複数のフィールドを一度に更新する公式の方法はないようですが、これを試すことができます:

data_dict = {'video_name': 'Test name', 'video_description': 'Something'}

VideoInfo.objects.filter(id=video_id).update(**data_dict)

は dict であるためrequest.POST、data_dict の代わりに使用することができますが、キーが DB のフィールド名と一致していることを確認してください。

別の方法がここで議論されています: How to update multiple fields of a django model instance? しかし、それはちょっとハッキーに見えます。

于 2013-08-05T07:37:11.473 に答える