как показать все свойства пользователя в Django - PullRequest
0 голосов
/ 20 декабря 2010

это мой код:

def callback(req):
 token = req.session.get('token', None)
 if not token:
  return render_to_response('callback.html', {
   'token': True
  })
 token = oauth.OAuthToken.from_string(token)
 if token.key != req.GET.get('oauth_token', 'no-token'):
  return render_to_response('callback.html', {
   'mismatch': True
  })
 token = get_authorized_token(token)

 # Actually login
 obj = is_authorized(token)
 if obj is None:
  return render_to_response('callback.html', {
   'username': True
  })
 try: user = User.objects.get(username=obj['screen_name'])
 except: user = User(username=obj['screen_name'])

 user.oauth_token = token.key
 user.oauth_token_secret = token.secret
 user.save()
 req.session['user_id'] = user.id
 del req.session['token']

 s = ''.join('%s: %s </br>' % (a, getattr(user, a)) for a in dir(user))
 return HttpResponse(s)

и я хочу использовать

s = ''.join('%s: %s </br>' % (a, getattr(user, a)) for a in dir(user))
return HttpResponse(s)

чтобы показать свойства пользователя,

но я получаю ошибку:

AttributeError at /twitter/login/callback/

Manager isn't accessible via User instances

так что я могу сделать,

спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

Вы должны устранить неполадки, используя цикл for и выяснить, где проблема!

Я перебрал объект User и обнаружил, что ему не нравится getattr(user, '_base_manager') или getattr(user, 'objects')

Вам нужны только поля или весь код Python, связанный с объектом пользователя?

Если вы просто хотите, чтобы поля определялись в models.py:

for field in user._Meta.fields:
    print '%s: %s' % (field.name, field.value_to_string(user))

если вы хотите всю магию, которую делает режиссёр
Просто сделайте нормальный цикл. Постижения списков не поймают исключения легче.

for attr in dir(user):
    try:
        print '%s: %s' % (attr, getattr(user, attr))
    except Exception, e:
        print '%s: %s' % (attr, e)

Если вы любите свой список понимания так много

def no_exception_getattr(user, attr):
    try: 
        return getattr(user, attr)
    except Exception, e: 
        return e

''.join(['%s: %s' % (x, no_exception_getattr(user, x)) for x in dir(user)])
0 голосов
/ 20 декабря 2010

Более понятным способом было бы добавить интроспективный метод к вашей модели.

см. Шаблоны Django: просмотреть и распечатать все доступные свойства объекта?

, а также Перебирать имена и значения полей экземпляра модели в шаблоне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...