最初,我像这样开始我的 UserProfile:
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
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
与set in一起工作得很好settings.py
。
但是,我的网站中有两种不同类型的用户,个人用户和企业用户,每个用户都有自己独特的属性。例如,我希望我的个人用户只有一个用户,因此有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
变量混合在一起,然后在必要时使用所需的模型。但这对我来说看起来并不干净,我宁愿将它们隔离并在适当的地方使用适当的模型。
任何关于这样做的干净方式的建议?