Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 没有与给定查询匹配的项目_Django_Django Forms_Http Status Code 404 - Fatal编程技术网

Django 没有与给定查询匹配的项目

Django 没有与给定查询匹配的项目,django,django-forms,http-status-code-404,Django,Django Forms,Http Status Code 404,首先,我肯定知道我有一个与给定查询匹配的项目,所以我不理解这个错误。我们开始吧 我的URL.py中有两种模式,一种用于创建,另一种用于编辑: urlpatterns = patterns('', url(r'^(?P<project_id>[A-Z0-9_a-z]+)/add_test_setup/$', add_test_setup, name="add_test_setup"), url(r'^(?P<project_id>[0-9]+)/testSe

首先,我肯定知道我有一个与给定查询匹配的项目,所以我不理解这个错误。我们开始吧

我的URL.py中有两种模式,一种用于创建,另一种用于编辑:

urlpatterns = patterns('',
    url(r'^(?P<project_id>[A-Z0-9_a-z]+)/add_test_setup/$', add_test_setup, name="add_test_setup"),
    url(r'^(?P<project_id>[0-9]+)/testSetup/(?P<testsetup_id>\w+)/edit/$', add_test_setup, name="edit_test_setup"),
)
这些是模型:

class Project(models.Model):

    STATUS_CHOICES = ((0,'Not started'),(1,'ZERO'),(2,'KOM'))

    ref         = models.CharField(max_length=70, unique=True)
    description = models.TextField(_("Description"),max_length=170, blank=True)
    notes       = models.TextField(max_length=170,blank=True)
    customer    = models.CharField(max_length=70)
    operator    = models.ManyToManyField(User)
    supervisor  = models.CharField(max_length=70, blank=True)
    start_date  = models.DateField(blank=True,null=True)
    finish_date = models.DateTimeField(blank=True, null=True)
    status      = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_CHOICES[0][1])
    goal        = models.TextField(max_length=170, blank=True)


class TestSetup(models.Model):

    ref         = models.CharField(max_length=30)
    description = models.TextField(max_length=200,null=True,blank=True)
    notes       = models.TextField(max_length=200,null=True,blank=True)
    project     = models.ForeignKey(Project)

    def __unicode__(self):
        return "Test set-up %s" % (self.ref)
添加新的TestSetup没有任何问题,但是当我编辑TestSetup时,它抛出404“没有与给定查询匹配的项目”。起初,我认为问题在于视图的
get\u object\u或\u 404
,但后来我对这段代码进行了注释,并将其替换为
Project.objects.get(id=int(Project\u id))
。什么也没发生

这是我编辑testsetupform的HTML代码的一部分:

<form class="vertical" method="post" action="{% url 'edit_test_setup' testsetupform.instance.project.id testsetupform.instance.id %}"> {% csrf_token %}

    {{testsetupform}}

    <h6 style="margin-top:30px">Assign series <span class="tooltip" title="Assign series to this test set-up."><i class="fa fa-question-circle" style="cursor:pointer;color:green;"></i></span></h6>
    <hr class="alt1" />

    <input type="submit" class="button blue" value="Save" style="margin-top:30px"></input>
</form>
因此,项目(id=5)和测试设置(id=16)模型都存在!我已经使用其他项目模型进行了测试,并抛出了相同的错误

-----------第1版------------

此外,使用
/manage.py shell

>>> from django.shortcuts import get_object_or_404
>>> from projects.models import Project
>>>
>>> project = get_object_or_404(Project, pk=5)
>>> project
<Project: 182TRE>
>>> Project.objects.get(id=5)
<Project: 182TRE>
>>> 
此AJAX调用通过以下视图请求模板:

def load_test_setup(request, setup_id):

    testSetup = get_object_or_404(TestSetup, pk=int(setup_id))
    setupform = TestSetupForm(None, instance=testSetup)

    data = {'html':""}

    data['html'] = render_to_string('projects/test_setup_form.html', {'setupform':setupform}, context_instance=RequestContext(request))

    return HttpResponse(simplejson.dumps(data))
使用此url模式:

url(r'^testSetup/(?P<setup_id>\w+)/load/$', load_test_setup, name="load_test_setup"),
url(r'^testSetup/(?P\w+)/load/$,load\u test\u setup,name=“load\u test\u setup”),
我是否使用了
渲染到字符串


-----------版本结束。2------

重定向后您将收到404错误。 这一行:

return redirect("/projects/"+testsetup.project.ref+"/info/#tabr2", testsetup.project.ref)
或此行:

return redirect("/projects/"+project.ref+"/info/#tabr2", project.ref)
将您重定向到错误的URL,您将获得404

建议:

  • 检查此行生成的URL,确保它们已在项目中注册
  • (更好)使用
    django.core.urlresolvers.reverse
    生成重定向的URL。如果URL未注册,则会引发更有意义的异常

  • Project.objects.get(id=int(Project\u id))
    替换
    get\u object\u或\u 404时是否出现
    ObjectDoesNotExist
    异常?无。同样的404错误,没有
    ObjectDoesNotExist
    异常。这不是错误,因为我在其他视图中成功地使用了这些行。我正在编辑这个问题,添加一些可能至关重要的新信息。
    url(r'^testSetup/(?P<setup_id>\w+)/load/$', load_test_setup, name="load_test_setup"),
    
    return redirect("/projects/"+testsetup.project.ref+"/info/#tabr2", testsetup.project.ref)
    
    return redirect("/projects/"+project.ref+"/info/#tabr2", project.ref)