2011-05-15 48 views
0

嘿,大家我是新来的Django,所以我有问题解决这个问题。使用表格编辑对象

我目前有一个表格,允许用户保存他/她的事件。我还希望用户能够点击该事件并编辑该事件,而无需创建新事件。这是我目前添加事件的形式。

def event_page(request): 
if request.method == 'POST': 
    form = EventForm(request.POST) 
    if form.is_valid(): 
     event = Event.objects.create(
     user=request.user, 
     eventname = form.cleaned_data['eventname'], 
     eventdate = form.cleaned_data['eventdate'], 
     eventtime = form.cleaned_data['eventtime'], 
     address = form.cleaned_data['address']) 
     event.save() 
     return HttpResponseRedirect(
      '/user/%s/' % request.user.username 
     ) 
else: 
     form = EventForm() 
variables = RequestContext(request, { 
     'form': form 
    }) 
return render_to_response('events.html', variables) 

任何人都可以帮助使这种形式,因此它也允许编辑?

谢谢!

回答

0

这是很容易的,如果您使用的是ModelForm(http://docs.djangoproject.com/en/1.3/topics/forms/modelforms/)

示例代码会是这个样子:

def event_page(request, event_id=None): 
    """Return a form allowing the user to create or edit 
    an event. On a POST request, process the form.""" 

    # get an event instance: use a dummy instance if 
    # we're making a new event, else retrieve the requested event 
    if event_id: 
     event = get_object_or_404(Event, id=int(event_id)) 
    else: 
     event = Event() 

    # am I processing the form? if so, handle that... 
    if request.method == 'POST': 
     form = EventForm(request.POST, instance=event) 
     if form.is_valid(): 
      # save the form contents to the database 
      event = form.save() 

      # done; redirect the user off 
      return HttpResponseRedirect('/user/%s/' % request.user.username) 
    else: 
     form = EventForm(instance=event) 

    # done; return the template 
    return render_to_response('events.html', RequestContext(request, { 
     'form': form, 
    }))