我不知道该怎么做,我'空白'......
我有一个使用request.GET查询数据库并填写表单的函数,您可以更改内容并保存更新信息。问题是id没有传递给函数,Django选择INSERT而不是UPDATE,这里是代码:
看看这个烂摊子:
def meet_save(request):
if request.method == 'POST':
form = MeetingForm(request.POST)
if form.is_valid():
creator = get_object_or_404(Submitter, name=request.user)
meeting = Meeting(creator=creator)
meeting.ave = form.cleaned_data['ave']
meeting.st = form.cleaned_data['st']
meeting.date = form.cleaned_data['date']
#it is supposed to work with save()
#i tryed meeting.save(force_update=True)
#and i figured out the id is missing
meeting.save()
for people in form.cleaned_data['people']:
meeting.people.add(people)
return HttpResponseRedirect('/meeting/register/')
elif request.GET.has_key('meeting'):
id = request.GET['meeting']
people = ''
ave = ''
st = ''
date = ''
try:
meeting = meeting.objects.get(id=id)
#id = unicode(request.GET['meeting'])
#Have tryed different ways with no luck
id = request.GET['meeting']
ave = meeting.ave
st = meeting.st
date = meeting.date
except:
pass
form = MeetingForm({
'id':id, 'ave' : ave, 'st' : st,'date' : date
})
else:
form = MeetingForm()
variables = RequestContext(request, {
'form': form,
})
return render_to_response('meeting/meeting_save.html', variables)
它接收在GET请求中传递的meeting = id(如/ meeting / register / meeting = 3)并且表单获取数据但是在保存时会创建一个新行而不是更新它,但它不会像wirk一样这在Django中,也许是PHP而不是Django !!!
这是Django的正确代码:
def meet_save(request):
pk=request.GET['meeting'] #get the meeteng id from url
form = MeetingForm(request.POST)
if form.is_valid():
meeting, created = Meeting.objects.get_or_create(id=pk)
meeting.ave = form.cleaned_data['ave']
meeting.st = form.cleaned_data['st']
meeting.date = form.cleaned_data['date']
meeting.people = form.claned_data['people']
meeting.save()
#for people in form.cleaned_data['people']:
#meeting.people.add(people)
return HttpResponseRedirect('/meeting/register/')
else:
meeting = get_object_or_404(Meeting, pk=request.GET['meeting'])# this is the id passed
form = MeetingForm(instance=meeting)
variables = RequestContext(request, {
'form': form,
})
return render_to_response('meeting/meeting_save.html', variables)
我想mess
可能会有效,但我修复了我的模板,因为 POST 是这样的: method = POST action =“。 “,当我到达页面时,我发现网址很好,但是当在帖子中发送数据时,它会清除 meeting = id ,我认为那是真正的恐怖!我将其更改为 action =“”我没有看到关于它的文档中的anithing,我已经读过它是相同的,请注意它不是。
Django摇滚!!!
答案 0 :(得分:4)
您是否有理由不使用django内置机制用相关对象填充表单?例如:
meeting = Meeting.objects.get(pk=id)
form = MeetingForm(instance=meeting)
此外,您应该使用django快捷方式get_object_or_404,以便您可以避开不需要的行为。因此,它不会创建一个新对象,而只会发回404.没有造成任何伤害。