django allauth参考社交帐户

时间:2016-06-24 19:32:13

标签: django django-models django-allauth

我是Django的新手,我正在尝试建立一个用户可以发布“旅行”的应用程序(使用django-allauth,facebook社交帐户登录),我希望该旅行模式能够被绑定进入创建它的用户的社交帐户。

我在保存数据库之旅时遇到了问题。我必须使用Javascript修改输入的数据,所以我使用ajax POST请求,并使用Authorization=Bearer 709709JHKLJHKJLhHKHKJHKH...etc

获取用户的社交ID

我的模特是:

<p class="social-id">{{ user.socialaccount_set.all.0.uid }}</p>

我收到一条错误消息:class Trip(models.Model): driver = models.OneToOneField(allauth.socialaccount.models.SocialAccount) 我试图让模型驱动程序字段引用Cannot assign "'10206730564687878'": "Trip.driver" must be a "SocialAccount" instance.,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

您正在使用OneToOneField。每个用户只能发一次旅行吗?如果您希望他们能够发布多个,则应使用ForeignKey()代替。

另外,是否有理由将其链接到SocialAccount实例,而不是主User实例?我会用

class Trip(models.Model):
    driver = models.ForeignKey(User, models.CASCADE, related_name='trips')

现在,您收到错误的原因是,因为您尝试将str(文本字符串)分配给OneToOneField字段。但该字段需要SocialAccount

的实例

要修复它,而不是执行trip.driver = "10206730564687878",您需要获取SocialAccount的实例(例如,对于当前用户),然后将其分配给驱动程序:

soc_acc = SocialAccount.objects.get(user=request.user)
trip.driver = soc_acc
trip.save()

这会为SocialAccount提供trip.driver个实例。

另一件事:如果是登录用户添加自己,则无需向表单发送任何SocialAccount ID。而是从登录用户的request.user对象获取它。