【发布时间】:2013-12-06 09:14:27
【问题描述】:
我正在尝试扩展 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
问题是每次我想保存这个“扩展”的 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 模型继承,没有明确声明该字段。我究竟做错了什么?这是正确的做法还是我最好创建一个不扩展 Account 类但仍通过 ForeignKey 字段链接到它的模型?
【问题讨论】:
标签: python django django-models django-users