最初に、私は次のように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'
で設定するとうまく機能しsettings.py
ます。
ただし、私のWebサイトには、個人と企業の2種類のユーザーがいて、それぞれに固有の属性があります。たとえば、個人ユーザーには単一のユーザーのみを持たせ、したがって、を持たせuser = models.OneToOneField(User)
、企業の場合は、同じプロファイルに関連する複数のユーザーを持たせたいので、user = models.ForeignKey(User)
代わりにそうします。
そこで、モデルを2つの異なるモデルに分離することを考えましたIndivProfile
。どちらも、モデル固有の属性を関連するサブモデルに移動しながらCorpProfile
継承します。UserProfile
私には良いアイデアのようで、おそらくうまくいくでしょうが、AUTH_PROFILE_MODULE
ユーザーごとに異なる2つのユーザープロファイルがあるため、この方法を指定することはできません。
UserProfile
また、複数のクラス(モデル)から継承して、次のようにすることも考えました。
class UserProfile(IndivProfile, CorpProfile):
# some field
def __unicode__(self):
return self.user.email
このようにして、私はAUTH_PROFILE_MODULE = 'accounts.UserProfile'
その問題を設定して解決します。しかし、Pythonの継承は左から右に機能し、のすべての変数IndivProfile
が支配的になるため、これは機能するようには見えません。
IndivProfile
確かに、変数をすべて一緒に混合した単一のモデルを常に持つことができCorpProfile
、必要に応じて必要なモデルを使用します。しかし、それは私にはきれいに見えません。むしろ、それらを分離して、適切な場所で適切なモデルを使用することを望みます。
これを行うためのクリーンな方法の提案はありますか?