2013-05-13 2 views
-1

views.pyPhone_info сопоставления запросов не существует

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) 

Traceback

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') 

Edit:

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

Я обновил свои view.py с обновленным кодом. Повторяется проблема –

+0

Вы уверены, что данные существуют с идентификатором текущего пользователя в качестве внешнего ключа? –

+0

Bibhas, пользователь является внешним ключом –

ответ

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) 

Я уверен, что вы новичок с Джанго, но говорю, что каждый раз, когда не помогает вещам. Правильная логика. Попробуйте 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, хотя у вас есть переменная, где она назначена. В то время как оба запроса будут работать, но необходимо, чтобы вы соблюдали соглашение, когда вы пишете код, делает его гораздо более отлаживаемым позже.

0

Вы не показали свой след, поэтому мы понятия не имеем, откуда исходит ваша ошибка.

Однако я укажу, что у вас есть ошибка во второй строке: user не определен, поэтому user.id всегда будет терпеть неудачу. Вероятно, вы имели в виду request.user.id. Конечно, вы поймали и скрыли все ошибки в этом заявлении try/except, так что вы бы никогда не знали, была ошибка имени. Никогда не делай этого. Поймите ошибки, которые, как вы знаете, будут подняты: в этом случае это User.DoesNotExist.

+0

Вздох.Я не заметил эту строку, она, очевидно, делает определение «телефон» внутри, которое пытается/за исключением совершенно бессмысленного. И я не понимаю, что вы не понимаете: там * не * Phone_info для текущего пользователя. Это сообщение об ошибке совершенно ясно. С чем вы сталкиваетесь? –

+0

Прежде всего, исправьте эти две проблемы, которые я заметил. Затем попробуйте использовать некоторую логику, чтобы решить оставшуюся проблему самостоятельно. Если вы не можете, опубликуйте обновленный код и объясните, с чем вы столкнулись. –

Смежные вопросы