Django 没有与给定查询匹配的项目
首先,我肯定知道我有一个与给定查询匹配的项目,所以我不理解这个错误。我们开始吧 我的URL.py中有两种模式,一种用于创建,另一种用于编辑: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
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)