Менеджер не доступен через экземпляры SocialToken
Что-то очень странное происходит с моим сценарием, я отлаживал весь день и ничего не получил. Я искал повсюду и ничего не решил мою проблему, название может вводить в заблуждение, но это ошибка, которую я получаю.
Я использую Django-Allauth, у меня есть SocialAccounts и SocialTokens
socialaccounts = SocialAccount.objects.filter(provider='facebook')
for SocialAccount in socialaccounts:
socialtokens = SocialToken.objects.filter(id=SocialAccount.id)
for SocialToken in socialtokens:
#get a few values, set a few values
#at the end update or create a custom model
obj, created = FacebookPagesList.objects.update_or_create(user=P.user, Page_ID=P.Page_ID, uid=P.uid, defaults = updated_values)
Я отлаживал это несколько раз, он прекрасно работает, когда он запускается только один раз, т.е. я ограничиваю список SocialAccount пользовательским фильтром для одного пользователя, и он работает правильно, затем я делаю это для второго пользователя, и он тоже работает нормально. Пока 2 пользователя являются единственными в БД. Когда я удаляю пользовательский фильтр, он проходит через 1-го пользователя и заполняет модель, но не работает для 2-го пользователя.
ИДК, что еще попробовать. Вот моя модель.
class FacebookPagesList(models.Model):
user = models.ForeignKey(SocialAccount)
Page_ID = models.CharField('Page ID', max_length=255)
Page_Name = models.CharField('Page Name', max_length=255)
Page_Access_Token = models.TextField('Page Token')
Page_Category = models.CharField('Page Category', max_length=100)
uid = models.CharField('FB User ID',max_length=255)
Perms = models.TextField('Permissions')
getdata = models.BooleanField('Pull data?', default=True, null=False)
DateAdded = models.DateTimeField('Date Added', default=timezone.now)
DateModified = models.DateTimeField('Date Modified', default=timezone.now)
LastDataPull = models.DateTimeField('Last Data Pulled', default='1990-01-01 00:00:00')
#id = models.IntegerField('ID', default=0, primary_key=True)
def __str__(self):
return self.Page_Name
class Meta:
unique_together = ('user', 'Page_ID')
1 ответ
Ошибка, которую вы получаете, говорит вам совсем немного. "Менеджер" относится к Model.objects
так что где-то вы пытаетесь получить доступ .objects
на одном SocialToken
,
Я думаю, что где-то в вашем коде у вас есть что-то вроде следующего:
SocialToken = SocialToken.objects.first() # This isn't good!
...
tokens = SocialToken.objects.all() # This will cause your error
Здесь, потому что SocialToken
ссылается на экземпляр, а не на вашу модель, вы не сможете получить доступ SocialToken.objects
Ваш менеджер.
Вы сделали это с SocialAccount
в коде, который вы вставили выше. Используйте что-то вроде social_account
скорее, чем SocialAccount
для ссылки на индивидуальный аккаунт:
social_accounts = SocialAccount.objects.filter(provider='facebook')
for social_account in social_accounts:
socialtokens = SocialToken.objects.filter(id=social_account.id)
Просмотрите свой код и посмотрите, есть ли у вас CapWords
экземпляры и переименовать их, чтобы они separated_with_underscores
, См. Руководство по стилю Python для получения дополнительной информации о соглашениях об именах классов / экземпляров / переменных (это хорошее чтение!).