2016-02-16 2 views
1

Это происходит следующим образом; DoesNotExist at/post/naver/Запрос соответствия MyProfile не существует

Я получаю эту ошибку теперь, когда я добавил id в конце этой строки, profile = MyProfile.objects.get(user=request.user.id) Я использую userena. Я должен использовать идентификатор, в противном случае она дает не «SimpleLazyObject»

Это отслеживающий

Traceback: 
/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
/ebagu/main/views.py" in post 
    87.  profile = MyProfile.objects.get(user=request.user.id) 
/env/local/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method 
    127.     return getattr(self.get_queryset(), name)(*args, **kwargs) 
/env/local/lib/python2.7/site-packages/django/db/models/query.py" in get 
    334.     self.model._meta.object_name 

Exception Type: DoesNotExist at /post/naver/ 
Exception Value: MyProfile matching query does not exist. 
+0

ли вы печатаете request.user может быть, это показывает «Анонимный пользователь» – Vishnu

ответ

2

Если профиль не гарантированно существует в базе данных, вам нужно будет написать код для обработки этого случая. Общий подход заключается в том, чтобы поймать исключение DoesNotExist.

try: 
    profile = MyProfile.objects.get(user=request.user) 
    # if it's a OneToOne field, you can do: 
    # profile = request.user.myprofile 
except MyProfile.DoesNotExist: 
    profile = None 
    # other code that handles missing profile 

Если все авторизированные пользователи имеют профиль, но ваша точка зрения также обработки анонимных пользователей, ваш код может быть яснее, если вы используете, если заявление вместо этого. Вы можете создать профиль, отображающий значения по умолчанию для анонимных пользователей.

if request.user.is_authenticated(): 
    profile = request.user.myprofile 
else: 
    profile = MyProfile(favourite_food="pasta", favourite_colour="blue") 
+0

Есть ли способ показать профиль для невостребованного пользователя? Я использую это для ppl, которые не вошли в систему. И я должен был указать идентификатор объявления в конце request.user – winixxee

+0

Я обновил свой ответ с примером для обработки анонимных пользователей, но я не уверен, что это то, что вы хотите. – Alasdair

2

Я думаю, вы должны использовать

profile = MyProfile.objects.get(user_id=request.user.id) 
+3

или просто 'пользователя = request.user' – Sayse

+0

или даже просто' профиль = request.user.myprofile'. –

+0

это не решит проблему tho – winixxee

0

Я предполагаю, что основаны от других вопросов, что MyProfile это одно к полю на вашем пользователе. так что вы можете получить доступ к нему через

request.user.myprofile 
1

Убедитесь, что пользователь существует в модели (MyProfile)

profile = None 
if MyProfile.objects.filter(user=request.user).exists(): 
    profile = MyProfile.objects.get(user=request.user) 
else: 
    pass 
    # Do something if data not exist's 
+3

Лучшим вариантом может быть 'try:', 'get()', 'except MyProfile.DoesNotExist:', что позволяет избежать дополнительного запроса для 'exists()'. – Alasdair

+0

@Alasdair вы можете показать мне решение с try и except ?, я попробовал, но не буду работать ... – winixxee

+0

с этим решением, и я помещаю request.user.id вместо request.user, я получаю локальную переменную ' профиль ', указанный перед назначением – winixxee

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