Django model.Model.'instance 'вызывает AttributeError - PullRequest
1 голос
/ 01 августа 2020

Я создаю веб-сайт в приложении Strava, используя django. Однако при попытке сохранить токен refre sh (код ниже) программа запускает ошибку AttributeError.

u.refresh_token = str(answer['refresh_token']) 

u является экземпляром класса User:

class User(models.Model):
   username = models.CharField(max_length=200, primary_key=True)
   password = models.CharField(max_length=200)
   strava_id = models.CharField(max_length=10)
   refresh_token = models.CharField(max_length=200)
   cookie = models.CharField(max_length=200, default='None')

Ошибка:

AttributeError 'dict' object has no attribute 'refresh_token'

Я понимаю, почему код делает это, потому что при просмотре локальных переменных он показывает, что u на самом деле имеет атрибут refresh_token.

u{'cookie': 'oP2L2ZDziOl7obaaYXmhFcOfRdXmOXurdqURXhX4JsWnPE1FQAIbGoEwpbcXax3h','password': 'W00lly!',

'refresh_token': '', 'strava_id': '', 'username': 'jeroenkodde'}

Я проверил, может ли это быть ответ, но это не вызвало проблемы. Для ясности я также включил словарь ответов:

answer  
{'access_token': '1346cc9606e18693e28c8547100ab936a14973ed',
 'athlete': {'badge_type_id': 0,
             'city': '',
             'country': None,
             'created_at': '2018-06-02T15:23:17Z',
             'firstname': 'Jeroen',
             'follower': None,
             'friend': None,
             'id': 31434041,
             'lastname': 'Kodde',
             'premium': False,
             'profile': 'avatar/athlete/large.png',
             'profile_medium': 'avatar/athlete/medium.png',
             'resource_state': 2,
             'sex': 'M',
             'state': '',
             'summit': False,
             'updated_at': '2020-07-25T13:14:48Z',
             'username': None},
 'expires_at': 1596300110,
 'expires_in': 20754,
 'refresh_token': '6924c5675d15ca6faae478dc3bd9791e78b7227c',
 'token_type': 'Bearer'}

Кроме того, при тестировании этого в оболочке он работал. Может кто подскажет, что не так с кодом.

1 Ответ

2 голосов
/ 01 августа 2020

Если u - словарь, вы должны использовать:

u['refresh_token'] = str(answer['refresh_token']) 

Способ, которым вы пытаетесь получить доступ, u должен выполняться, только если u - это класс.

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