django allauth 参考社交账号

django allauth reference social account

我是 Django 的新手,我正在尝试构建一个应用程序,用户可以在其中 post "trip"(使用 django-allauth、Facebook 社交帐户登录时)和我希望将该旅行模型绑定到创建它的用户的社交帐户中。

我在将行程保存到数据库时遇到问题。我不得不用 Javascript 修改输入的数据,所以我使用 ajax POST 请求,我用 <p class="social-id">{{ user.socialaccount_set.all.0.uid }}</p>[=14= 获取用户的社交 ID ]

我的模型是:

class Trip(models.Model):
    driver = models.OneToOneField(allauth.socialaccount.models.SocialAccount)

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

您正在使用 OneToOneField。每个用户只能post一次吗?如果您希望他们能够 post 多个,则应改用 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()

这会给 trip.driver 一个 SocialAccount 实例。


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