0

我有这样的代码。后保存在表中创建了一行,但是如何将值分配给socialidand 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'"

这是有道理的,因为该行已经存在。我可能缺少一些简单的东西,因此感谢您的帮助。

4

1 回答 1

1

不再建议使用带有 OneToOne 的单独模型,因为您可以直接扩展 User 模型。也就是说,这里的问题是您的信号正在创建 Appuser,但随后您尝试创建另一个。相反,获取由信号创建的那个:

user = User.objects.create_user('John Doe')
appuser = Appuser.objects.get(user=user)
appuser.accesstoken = '634646473'
appuser.socialid = 6436
appuser.save()

请注意,通常您可以从usertoappuser只需做user.appuser,但这可能在这一点上不起作用,因为在您获得用户时 appuser 不存在。下次您从数据库中获取 Appuser 或 User 时,直接引用将起作用。

于 2013-08-27T11:52:58.737 回答