Django表单插入记录而不是更新
当我使用url中的id参数编辑记录时,如果正在使用request.GET:“中的”elif'id“,它不会更新记录,但会创建一个新行Django表单插入记录而不是更新,django,django-forms,Django,Django Forms,当我使用url中的id参数编辑记录时,如果正在使用request.GET:“中的”elif'id“,它不会更新记录,但会创建一个新行 @login_required def login_save_page(request): if request.method == 'POST': form = LoginSaveForm(request.POST) if form.is_valid(): # Create or get login
@login_required
def login_save_page(request):
if request.method == 'POST':
form = LoginSaveForm(request.POST)
if form.is_valid():
# Create or get login.
login1 = _login_save(request, form)
return HttpResponseRedirect(
'/user/%s/' % request.user.username
)
elif 'id' in request.GET:
id2 = request.GET['id']
name=''
url=''
Login_username =''
notes= ''
password=''
try:
login1 = login.objects.get(
id = id2,
username=request.user
)
name = login1.name
url = login1.loginUrl
Login_username = login1.login_username
notes = login1.notes
password = login1.password
except (login.DoesNotExist):
pass
form = LoginSaveForm({
'id': id2,
'name': name,
'url': url,
'Login_username': Login_username,
'notes': notes,
'password': password
})
else:
form = LoginSaveForm()
variables = RequestContext(request, {
'form': form
})
return render_to_response('login_save_page.html', variables)
我假设您的表单是通过
POST
提交的,因此当您需要时(当用户提交表单时),elif“get”永远不会触发
您需要将该逻辑放在if request.method==“POST”
块中
想想“elif”块何时会触发。仅当请求方法不是
POST
,这意味着仅在页面加载时使用。如果我这样做,当我在url上使用id参数时,我不会获取记录的当前字段值,并且还会生成一条新记录。这就是我所改变的,以防我误解了你啊,这个谜题有两个部分。一个是get()块需要填充get中的记录,在POST期间,它还需要提取记录并执行不同的save()操作。我可能只是建议您使用ModelForm
,它可以通过传递一个要修改(或不修改)的实例来区分更新和插入。