django allauth参考社会账户
我是Django的新手,我正在尝试构建一个应用程序,用户可以发布一次“旅行”(在使用Django allauth,facebook社交帐户登录时),我希望该旅行模型绑定到创建它的用户的社交帐户中 我在将行程保存到数据库时遇到问题。我不得不用Javascript修改输入的数据,所以我使用了一个ajax POST请求,我用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
我的模型是:
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字段是有意设置的,我只希望用户能够发布一次行程