Phone_info匹配查询不存在

时间:2013-05-13 08:57:46

标签: django django-models django-forms django-views

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行。任何想法会是什么问题。

2 个答案:

答案 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,尽管你有一个变量在哪里分配。虽然两个查询都可以正常工作,但是在编写代码时必须遵循约定,以后可以进行更多的调试。