最初,我开始了我的用户配置是这样的:Django的 - 多个用户配置文件
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
verified = models.BooleanField()
mobile = models.CharField(max_length=32)
def __unicode__(self):
return self.user.email
与在settings.py
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
组一直很好的作品。
但是,我的网站有两种不同类型的用户,分别是个人和公司,每个用户都有自己独特的属性。例如,我希望我的个人用户只有一个用户,因此有user = models.OneToOneField(User)
,对于公司我希望他们有多个用户相关的相同配置文件,所以我会有user = models.ForeignKey(User)
而不是。
所以我想将模型分成两个不同的模型,IndivProfile
和CorpProfile
,它们都从UserProfile
继承,同时将模型特有的属性移动到相关的子模型中。似乎对我来说是一个好主意,可能会工作,但我不能指定AUTH_PROFILE_MODULE
这种方式,因为我有两个用户配置文件,对于不同的用户会有所不同。
我也想过做周围用另一种方式,有多个类(模型),东西UserProfile
继承这样的:
class UserProfile(IndivProfile, CorpProfile):
# some field
def __unicode__(self):
return self.user.email
这样我会成立AUTH_PROFILE_MODULE = 'accounts.UserProfile'
并解决它的问题。但是这看起来并不会奏效,因为python中的继承从左到右工作,并且IndivProfile
中的所有变量都将占主导地位。
当然,我总是可以将一个模型与IndivProfile
和CorpProfile
变量混合在一起,然后在必要时使用所需的变量。但是这对我来说看起来并不干净,我宁愿让他们隔离并在适当的地方使用合适的模型。
任何建议干净这样做的方式?
[继承](https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance)呢? – danihp 2012-03-10 21:27:13
我可以使'UserProfile'抽象,让'IndivProfile'和'CorpProfile'继承'UserProfile'。这仍然不能解决'AUTH_PROFILE_MODULE'问题。它将指向哪一个? – abstractpaper 2012-03-10 22:19:42
如何将公司+个人+帐户类型字段添加到一个模型?如果你只有两种类型,我认为它可以是可以的,但如果你有两个以上的类型,或者那些配置文件是非常不同的,可能会很糟糕。 – 2012-03-10 22:24:30