注:バージョン 1.5 以降の Django のユーザー モデルの更新を考慮して、この質問を再度行いました。
既存の Django サイトを再構築して改善し、Webfaction から Heroku に、Amazon の SimpleDB から Heroku Postgres に移行しています (ただし、開発時に Sqllite3 でローカルにテストしています)。私がやっていることの多くは、Django admin、ユーザー認証などの組み込みの Django 機能を使用するように移行しています。
概念的には、このサイトには学生と企業の 2 種類のユーザーがいます。2 種類のユーザーには、完全に異なるアクセス許可と、ユーザーに関する情報が保存されています。これは非常によくあることで、サイトの元の構造では、データ モデルを次のように設定しました。
Users
ID (primary_key)
Business_or_Student ('B' if business, 'S' if student)
email (unique)
password (hashed, obviously)
...
Students
ID (Foreignkey on Users)
<more information>
...
Businesses
ID (Foreignkey on Users)
<more information>
...
これは非常にうまく機能し、必要最小限のユーザー情報を Users テーブルに格納し、さらに詳細な情報を Student テーブルと Businesses テーブルに格納しました。ユーザーの完全なプロファイルを取得するには、次の疑似コードに沿った何かが必要でした:
def get_user_profile(id):
if Users(id=id).Business_or_Student = 'B':
return Businesses(id=id)
else:
return Students(id=id)
User
移動中に、Django の組み込みオブジェクトの機能がかなり制限されていることがわかりましたUserProfile
。作成したクラスでそれを拡張する必要があり、追加Student
のBusiness
テーブルがありました。私が Django 管理者で行っているすべてのパッチ適用を考えると、私はいつも別の方法で行っていたため、Django モデルに比較的慣れていないため、これが最善の方法なのか、それともそうすべきなのかわかりません。企業と学生のすべての情報をテーブルに貼り付けUserProfile
て、2 つを異なるグループで区別するか、組み込みUser
オブジェクトでこれをすべて行う方法さえあれば。
企業と学生も異なるインターフェイスを持っているため、Django プロジェクト内で 2 つを別のアプリとして設定し、ビュー、モデルなどを完全に分離することを真剣に検討しています。それは次のようになります。
MyProject/
MyProject/ (project folder, Django 1.4)
mainsite/
students/
businesses/
私の最大の関心事の 1 つは、Django 管理者に関するものです。拡張User
では、次のコードを追加する必要がありました。
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
class UserAdmin(UserAdmin):
inlines = (UserProfileInline, )
ただし、ユーザーのビジネスまたは学生の側面に関する情報User
がプルアップされたときに Django 管理画面に表示されるようにしたいと思いますが、モデルの一部はForeignKey
andStudent
モデルBusiness
にあります。またはそれに接続された1 つのオブジェクト。管理者に条件付きインラインを追加する方法がわかりません。Student
Business
User
User
Student
Business
質問: この構造とこれらの問題を考慮して、このサイト、特にデータ モデルを設定する最善の方法は何ですか?