[英]Django: update creating new object instead of updating existing in django?
[英]Django ModelForm creating new instance instead of updating existing database entry
我正在嘗試創建一種與與單個用戶相關的Tool
對象一起使用的表單。
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',
]
我有點迷路了。 我讀過的每一件事都說應該更新而不是創建。
為什么要創建一個新實例而不是更新舊實例? 如何修復代碼,以便更新舊實例?
您是否嘗試過使用commit=False
保存表單,然后使用force_update=True
提交/保存Model實例?
這就是我建議保存Tool實例的方式:
if frm.is_valid():
tool = frm.save(commit=False)
tool.save(force_update=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.