2013-05-04 80 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