Skip to main content
 首页 » 编程设计

python之Django 用户帐户,扩展帐户

2025年05月04日37bluestorm

我正在尝试扩展 Django 的用户帐户帐户模型以向其添加一组附加字段。问题是“帐户”对象有一组检查某些参数的方法,我想重新使用所有这些代码。因此,我首先想到的是用我自己的类扩展 Account 类:

class snAccount(Account): 
 
    account = models.OneToOneField(Account, related_name="sn_account", verbose_name=_("snAccount")) 
 
    # Extra fields 
    organization = models.CharField(_("language"), ...,  )     
    country = CountryField() 
 
    @classmethod 
    def create(cls, request=None, **kwargs): 
        create_email = kwargs.pop("create_email", True) 
        user = kwargs.pop("user", None) 
        acc = Account.create(request, user=user, create_email=create_email) 
        x_account = cls(**kwargs) 
        #x_account.user = request.user 
        x_account.save() 
        return x_account 

问题是每次我想保存这个“扩展的”帐户类时,我都会遇到以下异常:

Exception Type:     IntegrityError 
Exception Value:    (1048, "Column 'user_id' cannot be null") 

如果我将用户字段直接添加到扩展帐户(取消注释行“#x_account.user = request.user”,我会收到以下错误:

Exception Type:     IntegrityError 
Exception Value:    (1062, "Duplicate entry '1' for key 'user_id'") 

我认为这个字段将直接从帐户模型继承,没有对该字段进行显式声明。我究竟做错了什么?这是正确的做法还是我最好创建一个不扩展 Account 类但仍通过 ForeignKey 字段链接到它的模型?

请您参考如下方法:

在 Substituting a custom User model 下的 Django 中详细记录了如何执行此操作.