最初,我開始了我的用戶配置是這樣的: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