views.py
def add_phone(request):
user=request.user
try:
phone = Phone_info.objects.get(user=user.id)
except Phone_info.DoesNotExist:
phone = None
phoneForm = PhoneForm({'user':request.user})
phone = Phone_info.objects.get(user=request.user)
phoneForm = PhoneForm(instance=phone)
if request.method=='POST':
phoneForm = PhoneForm(request.POST,instance=phone)
if phoneForm.is_valid():
phone=phoneForm.save(commit=False)
phone.save()
return redirect('/member/contact-list/')
return render_to_response('incident/add_phone.html',
{
'about_menu': True,
'PhoneForm' :phoneForm
},
context_instance=RequestContext(request))
models.py是
class Phone_info(models.Model):
user = models.ForeignKey(User, null=True)
name1 = models.CharField('Name', max_length=100, null=True, blank=True)
number1 = models.CharField('Number',max_length=20, null=True, blank=True)
name2 = models.CharField('Name', max_length=100, null=True, blank=True)
number2 = models.CharField('Number', max_length=20, null=True, blank=True)
回溯
Environment:
Request Method: GET
Request URL: http://192.168.100.10/member/add-phone/
Django Version: 1.3.7
Python Version: 2.7.0
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'django.contrib.humanize',
'django.contrib.staticfiles',
'south',
'collect',
'incident']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware')
编辑:
Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/root/Projects/ir/incident/views.py" in add_phone
648. phone = Phone_info.objects.get(user=request.user)
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py" in get
132. return self.get_query_set().get(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py" in get
349. % self.model._meta.object_name)
Exception Type: DoesNotExist at /member/add-phone/
Exception Value: Phone_info matching query does not exist.
我无法在数据库中插入或更新数据,收到以下错误“Phone_info matching query does not exist"
任何人都可以告诉我这里出了什么问题。 编辑:我更新了追溯。错误是在第6行。任何想法会是什么问题。
答案 0 :(得分:0)
您没有显示回溯,因此我们不知道您的错误来自哪里。
但是我会指出第二行中有错误:user
未定义,因此user.id
将始终失败。你可能意味着request.user.id
。当然,您已经在try / except语句中捕获并隐藏了所有错误,因此您永远不会知道存在名称错误。永远不要那样做。抓住你知道会引发的错误:在这种情况下,它是User.DoesNotExist
。
答案 1 :(得分:0)
<Model_name> matching query does not exist
表示它的确切内容。您正在寻找的记录不存在。因此,请确保数据首先存在。
你的代码也有松散的结局 -
user=request.user
try:
# This line is generating error because record doesn't exists[1]
phone = Phone_info.objects.get(user=user.id)
except Phone_info.DoesNotExist:
phone = None
phoneForm = PhoneForm({'user':request.user})
# You're making the same query as [1] here, knowing that it might not exist. Redundant, illogical.
phone = Phone_info.objects.get(user=request.user)
我确信你是django的新手,但是说每次都没有帮助。让你的逻辑正确。尝试get()
,如果有异常,请创建记录。你发起了PhoneForm
三次。数据被覆盖。解决了这个问题。
Django拥有最全面的文档之一。 Go through it
PS:正如奖金提示一样,让您的编码约定正确。在一个地方,您正在查询Phone_info.objects.get(user=user.id)
刚刚分配user = request.user
的地方,就在它旁边,您正在查询Phone_info.objects.get(user=request.user)
。不仅仅是你打破了使用id
来查询的惯例,从早期的行开始,你再次使用了request.user
,尽管你有一个变量在哪里分配。虽然两个查询都可以正常工作,但是在编写代码时必须遵循约定,以后可以进行更多的调试。