Django用户帐户,扩展帐户

2024-09-29 21:56:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

^{pr2}$

如果我直接将user字段添加到扩展帐户(取消对“#x”行的注释_帐户.用户= 请求.用户“我得到以下错误:

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

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


Tags: 方法用户name模型modelsemailrequestcreate
2条回答

Substituting a custom User model下的Django中有详细的说明。在

问题是因为当子类化一个模型时,django会在新模型中创建一个指向基础模型的*_ptr字段。创建模型的新实例时,将同时创建具有属性的模型和具有基本属性的基础模型。在

在本例中,如果删除Account.create(...)行,django将使用自定义字段创建snAccount,并使用填充的所有基字段创建{},并将它们链接在一起。在

相关问题 更多 >

    热门问题