经理无法通过SocialToken实例

时间:2015-05-11 23:49:38

标签: django django-allauth

我的剧本发生了一些非常奇怪的事情,我整天都在调试,并且无处可去。我搜索的范围很广,没有解决我的问题,标题可能会产生误导,但那是我得到的错误。

我使用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)

我已经调试了好几次,只运行一次就可以正常运行,IE我用一个用户的用户过滤器限制SocialAccount列表并且它正常工作,然后我为第二个用户做了它也工作得很好。到目前为止,这两个用户是数据库中唯一的用户。当我删除用户过滤器时,它会通过第一个用户并填充模型,但在第二个用户上失败。

idk还有什么可尝试的。这是我的模特。

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 个答案:

答案 0 :(得分:2)

你得到的错误告诉了你很多。 "管理器"是指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个实例并重命名,以便他们重新DateTime.Parse()。有关类/实例/变量命名约定的更多信息,请参阅the Python Style Guide(这是一个很好的阅读!)。