我有这样的代码。帖子保存会在表格中创建一行,但如何为socialid
和accesstoken
分配值?
class Appuser(models.Model):
user = models.OneToOneField(User)
socialid = models.IntegerField(null=True)
accesstoken = models.CharField(max_length=255L, null = True)
class Meta:
db_table = 'AppUser'
def __str__(self):
return "%s's profile" % self.user
@receiver(post_save, sender=User)
def create_cfituser(sender, instance, created, **kwargs):
if created:
Appuser.objects.get_or_create(user=instance)
在shell中运行它给了我:
>>> user = User.objects.create_user('John Doe')
>>> appuser = Appuser(user = user,accesstoken = '634646473', socialid='6436')
>>> appuser.save()
"Duplicate entry '9' for key 'user_id'"
这是有道理的,因为该行已经存在。这可能是我想念的简单,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
不再推荐使用单独的模型和OneToOne,因为您可以直接扩展用户模型。也就是说,这里的错误是您的信号正在创建Appuser,但是您尝试创建另一个。相反,获取由信号创建的那个:
user = User.objects.create_user('John Doe')
appuser = Appuser.objects.get(user=user)
appuser.accesstoken = '634646473'
appuser.socialid = 6436
appuser.save()
请注意,通常只需执行user
即可从appuser
转到user.appuser
,但这可能在此时无效,因为当时appuser不存在你有用户。下次从db获取Appuser或User时,直接引用将起作用。