gpt4 book ai didi

python - 创建 django url 时出错(匹配的查询不存在)

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:24 31 4
gpt4 key购买 nike

我刚刚开始使用 django 进行开发,但我陷入了困境......

我有我的 models.py:

 from django.db import models
class Meeting(models.Model):
title = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published')
latCoord = models.FloatField(default = 0.0)
longCoord = models.FloatField(default = 0.0)

def __unicode__(self):
return self.title

class Location(models.Model):
address = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published')
participants = models.IntegerField()
latCoord = models.FloatField()
longCoord = models.FloatField()
meeting = models.ForeignKey(Meeting)

我的urls.py:

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^(?P<meeting_id>\d+)/$', 'meeting.views.meeting'),
url(r'^add_location/(?P<meeting_id>\d+)/$', 'meeting.views.add_location'),
url(r'^create/$', 'meeting.views.create'),
)

和我的观点.py:

from django.shortcuts import render_to_response
from meeting.models import Meeting, Location
from forms import MeetingForm, LocationForm
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
from django.utils import timezone
from django.core import serializers
import math
import encodeUrl
def meeting(request, meeting_id = 1):
l = Location.objects.filter(meeting_id = meeting_id)
...
...

return render_to_response('meeting.html',
{'meeting': Meeting.objects.get(id = meeting_id), 'data':data})

def create(request):
print "test"
if request.POST:
form = MeetingForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/meetings/%s' % len(Meeting.objects.all()))
else:
form = MeetingForm()
args = {}
args.update(csrf(request))

args['form'] = form
return render_to_response('create_meeting.html', args)

到目前为止一切正常。每个新 session 的 URL 是 Meeting/meeting_id。现在我希望 url 是一个字符串而不是数字。所以我改变了代码:

url.py:

    from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^(?P<meeting_id_str>\w+)/$', 'meeting.views.meeting'),
url(r'^add_location/(?P<meeting_id_str>\w+)/$', 'meeting.views.add_location'),
url(r'^create/$', 'meeting.views.create'),
)

和views.py

    def meeting(request, meeting_id_str = 'b'):
#encode the string to an integer
meeting_id = encodeUrl.alphaID(meeting_id_str, True)
l = Location.objects.filter(meeting_id = meeting_id)
...
...
...
return render_to_response('meeting.html',
{'meeting': Meeting.objects.get(id = meeting_id), 'data':data})

def create(request):
print "test"
if request.POST:
form = MeetingForm(request.POST)
if form.is_valid():
form.save()
meeting_id_str = encodeUrl.alphaID(len(Meeting.objects.all()), False)
return HttpResponseRedirect('/meetings/%s' % meeting_id_str)
else:
form = MeetingForm()
args = {}
args.update(csrf(request))

args['form'] = form
return render_to_response('create_meeting.html', args)

编码有效,如果我调用一个网址,例如meeting/b,它会更改为meeting/1,但是当我想创建一个新 session 时,我会得到“查询不存在”异常(exception)

 Request Method:    GET
Request URL: http://127.0.0.1:8000/meetings/create/
Django Version: 1.5.1
Exception Type: DoesNotExist
Exception Value:

Meeting matching query does not exist. Lookup parameters were {'id': 3945298144L}

Exception Location: C:\Python27\lib\site-packages\django\db\models\query.py in get, line 389
Python Executable: C:\Python27\python.exe
Python Version: 2.7.5

感谢每一个提示,谢谢

最佳答案

问题出在您创建 View 的这些行中。

...
meeting_id_str = encodeUrl.alphaID(len(Meeting.objects.all()), False)
return HttpResponseRedirect('/meetings/%s' % meeting_id_str)

我认为您期望创建的最后一个对象的id等于数据库中的对象数量,但这可能不是真的。

尝试将创建 View 代码更新为

....
if request.POST:
form = MeetingForm(request.POST)
if form.is_valid():
mobj = form.save() #get object created using form
meeting_id_str = encodeUrl.alphaID(mobj.id, False) #use its id
return HttpResponseRedirect('/meetings/%s' % meeting_id_str)
else:
....

关于python - 创建 django url 时出错(匹配的查询不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19860252/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com