我是Django的新手,我正在尝试建立一个用户可以发布“旅行”的应用程序(使用django-allauth,facebook社交帐户登录),我希望该旅行模式能够被绑定进入创建它的用户的社交帐户。
我在保存数据库之旅时遇到了问题。我必须使用Javascript修改输入的数据,所以我使用ajax POST请求,并使用Authorization=Bearer 709709JHKLJHKJLhHKHKJHKH...etc
我的模特是:
<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.
,但这也不起作用。
答案 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
对象获取它。