2013-05-04 65 views
0

views.py報告匹配的查詢不存在

def when(request,pk=id): 

    if request.method == 'POST': 

     reportform = ReportForm(data=request.POST) 

     if reportform.is_valid(): 
      log.debug("test:%s",reportform) 
      report = Report.objects.get(pk=id) 
      reportform=ReportForm(instance=report) 
      report = reportform.save(commit=False) 
      report.user = request.user 
      report.save() 
      return redirect('/member/media/') 
    else: 
     report=Report.objects.get(pk=id) 
     reportform = ReportForm(instance=report) 
    return render_to_response('incident/when.html',{ 
        'newreport_menu': True, 
        'form': reportform, 
        }, 
        context_instance=RequestContext(request)) 

urls.py

(r'^when/(?P<id>\w+)/$', 'when'), 

models.py

class Report(models.Model): 
    user = models.ForeignKey(User, null=False) 
    incident_number = models.CharField('Incident Number', max_length=100) 
    device_id = models.CharField('Device Id', max_length=100) 
    app_uuid = models.CharField('Unique App Id', max_length=100) 
    created_date_time = models.DateTimeField('Created',auto_now=True) 
    manual_date = models.DateField('manual date', null=True, blank=True) 
    manual_time = models.TimeField('manual time',null=True, blank=True) 

上面的代碼是用於執行編輯操作。我得到很多的誤區,比如這個:"when() got an unexpected keyword argument 'id'"

回溯

TypeError at /member/when/ 
when() takes exactly 2 arguments (1 given) 
Request Method: GET 
Request URL: http://192.168.100.10/member/when/ 
Django Version: 1.3.7 
Exception Type: TypeError 
Exception Value:  
when() takes exactly 2 arguments (1 given) 
Exception Location: /usr/lib/python2.7/site-packages/django/core/handlers/base.py in get_response, line 111 
Python Executable: /usr/bin/python 
Python Version: 2.7.0 
Python Path:  
['/root/Projects/ir', 
'/usr/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', 
'/usr/lib/python2.7/site-packages/parse-1.6.1-py2.7.egg', 
'/usr/lib/python2.7/site-packages/django_testscenarios-0.7.2-py2.7.egg', 
'/usr/lib/python2.7/site-packages/django_testproject-0.1.1-py2.7.egg', 
'/usr/lib/python2.7/site-packages/extras-0.0.3-py2.7.egg', 
'/usr/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg', 
'/usr/lib/python2.7/site-packages/wsgi_intercept-0.5.1-py2.7.egg', 
'/usr/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg', 
'/usr/lib/python2.7/site-packages/Pygments-1.6-py2.7.egg', 
'/usr/lib/python2.7/site-packages/Cython-0.18-py2.7-linux-i686.egg', 
'/usr/lib/python27.zip', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', 
'/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gst-0.10', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info', 
'/usr/lib/python2.7/site-packages/webkit-1.0'] 
Server time: Sat, 4 May 2013 16:29:44 +1000 
Traceback Switch to copy-and-paste view 

/usr/lib/python2.7/site-packages/django/core/handlers/base.py in get_response 
         response = callback(request, *callback_args, **callback_kwargs) 

template.html

<form action="/member/when/" method="POST"> {% csrf_token %} 

{{ form.manual_time.errors }} 
{{ form.manual_date }} {{ form.manual_time }} 
<p id=ir-nextbutn><a href="{% url incident.views.media %}"> 
{% include "buttons/next.html" %}</form> 

誰能告訴我,我做錯了什麼?

回答

0

when函數應該有名爲id而不是pk的參數。

因此改變

def when(request,pk=id): 

def when(request,id): 

另外,你需要的時候Report與給定的ID不存在適當地處理案件。


編輯:

你需要傳遞id,這樣形式的URL是適當的模板中。另外,請更新您的觀點,如下所示以解決其他問題

def when(request,id): 
    try: 
     report = Report.objects.get(pk=id) 
    except ObjectDoesNotExists: 
     #handle when report does not exists 

    if request.method == 'POST': 

     reportform = ReportForm(data=request.POST, instance=report) 

     if reportform.is_valid(): 
      log.debug("test:%s",reportform) 

      report = reportform.save(commit=False) 
      report.user = request.user 
      report.save() 
      return redirect('/member/media/') 
    else: 
     reportform = ReportForm(instance=report) 
    return render_to_response('incident/when.html',{ 
        'newreport_menu': True, 
        'form': reportform, 
        'report_id': id,  #pass id too 
        }, 
        context_instance=RequestContext(request)) 

模板:

<form action="/member/when/{{report_id}}" method="POST"> {% csrf_token %} 
... 
+0

我的問題是,數據的現在在編輯模式,但如果我做了一些改變,然後按保存鍵,它給我這個錯誤「類型錯誤在/件/時/ when()只需要2個參數(1給出)「 – user2086641 2013-05-04 06:26:39

+0

@ user2086641,你可以用完整的回溯和模板更新問題。 – Rohan 2013-05-04 06:29:06

+0

回溯和模板已更新。更多此代碼用於編輯和更新數據庫中的manual_date和manual_time字段。請指導我將出現什麼問題 – user2086641 2013-05-04 06:35:30