2013-08-05 82 views
1

我想更新在Django模型數據是這樣的:在以下情況下更新Django中的queryset?

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) 
+0

你究竟想要更新什麼? –

+1

檢查此https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once –

+0

更新記錄其中id = video_id – pynovice

回答

5

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) 
    ... 

注意,在通過懶惰仿評論鏈接的doc顯示update功能的簽名。

2

肯定無法將表單實例傳遞給update(),因爲它只需要一個參數。閱讀更多here。所以,如果你想更新一個字段:

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) 

由於request.POST是一個字典,您可以嘗試使用它而不是data_dict,但要確保密鑰與數據庫中的字段名稱相匹配。

另一種方法已經在這裏討論:How to update multiple fields of a django model instance?但它看起來有點hacky。

相關問題