0
我試圖創建與正在與單個用戶Tool
對象的工作方式。的Django的ModelForm創建新實例,而不是更新現有的數據庫條目
class Tool(models.Model):
owner = models.ForeignKey(BaseUser)
tool_type = models.CharField(('tool_type'), max_length=40, blank=True)
description = models.CharField(('description'), max_length=100, blank=True)
available = models.BooleanField()
該工具通過這種形式
class ToolForm(forms.ModelForm):
tool_type = forms.CharField(max_length=40, label="Tool Type: ")
description = forms.CharField(max_length=100, label="Description: ")
available = forms.BooleanField(required = False)
owner = forms.ModelChoiceField(queryset = BaseUser.objects.all(),
widget=forms.HiddenInput())
class Meta:
model = Tool
刀具通過這種觀點
@login_required
def tool_register(request):
if request.method == 'POST':
frm = ToolForm(request.POST)
print(request.user)
if frm.is_valid():
frm.save()
return render_to_response('tools/tool_register_success.html')
else:
frm = ToolForm(initial = {'owner':request.user})
args = {}
args.update(csrf(request))
args['form'] = frm
args['activeuser'] = request.user
return render_to_response('tools/tool_register.html', args)
做出更新,這就是問題的所在。我正在用這個視圖更新這個工具。
@login_required
def tool_edit(request, tool_id):
curr_tool = Tool.objects.get(pk = tool_id)
if request.method == 'POST':
frm = ToolForm(request.POST, instance = curr_tool)
if frm.is_valid():
frm.save(force_update = True)
return render_to_response('tools/tool_edit_success.html')
else:
frm = ToolForm(instance = curr_tool)
args = {}
args.update(csrf(request))
args['form'] = frm
return render_to_response('tools/tool_edit.html', args)
但這創建具有更新信息的工具給出一個全新的實例,而不是更新現有的。請注意,我用平時instance = x
。該工具與單個BaseUser
。如果它很重要,那麼這個代碼也是。
class BaseUser(AbstractUser):
zipcode = models.IntegerField(('Zipcode'), max_length=5, blank=True)
address = models.CharField(('Address'), max_length=40, blank=True)
shown_username = 'username'
class Meta:
verbose_name = 'Base User'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['first_name',
'last_name',
'email',
'zipcode',
'address',
]
我有點失落。我讀過的每一件事都說這應該是更新而不是創建。
爲什麼會創建一個新的實例,而不是更新我的舊的實例?我如何修復代碼以便更新我的舊實例?
據我所知,'force_updaet = TRUE;適用於'Model.save()'方法,我不知道如果'ModelForm.save() '方法識別該關鍵字。我檢查了這個頁面,沒有'force_update'的提的是:https://docs.djangoproject.com/en/dev/topics/forms/modelforms – Raiyan 2014-10-06 18:36:58
你確定你正在發佈到正確的方法?你能展示模板嗎? – 2014-10-06 18:57:28