django allauth参考社会账户

django allauth参考社会账户,django,django-models,django-allauth,Django,Django Models,Django Allauth,我是Django的新手,我正在尝试构建一个应用程序,用户可以发布一次“旅行”(在使用Django allauth,facebook社交帐户登录时),我希望该旅行模型绑定到创建它的用户的社交帐户中 我在将行程保存到数据库时遇到问题。我不得不用Javascript修改输入的数据,所以我使用了一个ajax POST请求,我用{{user.socialaccount\u set.all.0.uid}} 我的模型是: class Trip(models.Model): driver = model

我是Django的新手,我正在尝试构建一个应用程序,用户可以发布一次“旅行”(在使用Django allauth,facebook社交帐户登录时),我希望该旅行模型绑定到创建它的用户的社交帐户中

我在将行程保存到数据库时遇到问题。我不得不用Javascript修改输入的数据,所以我使用了一个ajax POST请求,我用

{{user.socialaccount\u set.all.0.uid}}

我的模型是:

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

我得到一个错误,上面写着:
无法分配“'10206730564687878'”:“Trip.driver”必须是一个“SocialAccount”实例。
我试图使model driver字段引用
allauth.SocialAccount.models.SocialAccount.uid
,但这也不起作用

您使用的是
OneToOneField
。每个用户只能发布一次行程吗?如果您希望他们能够发布多个帖子,则应使用
ForeignKey()

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

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

现在,出现错误的原因是,您试图将
str
(文本字符串)分配给
OneToOneField
字段。但该字段需要一个
SocialAccount
实例

要解决此问题,您需要获取
SocialAccount
(例如当前用户)的实例,然后将其分配给驱动程序,而不是执行
trip.driver=“10206730564687878”

soc_acc = SocialAccount.objects.get(user=request.user)
trip.driver = soc_acc
trip.save()
这将为trip.driver提供一个
SocialAccount
实例



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

谢谢!是的,OneToOne字段是有意设置的,我只希望用户能够发布一次行程