Django User モデルを拡張して、別のモデルを指す外部キーを含めるようにしています ( Django docsで述べているように):
models.py:
class Ward(models.Model):
name = models.CharField(max_length=100)
def __unicode__(self):
return self.name
# Extending the user model
class WardMember(models.Model):
user = models.OneToOneField(User)
ward = models.ForeignKey(Ward)
def __unicode__(self):
return self.ward.name
admin.py:
class WardMemberInline(admin.StackedInline):
model = WardMember
can_delete = False
verbose_name_plural = 'ward member'
# Define a new User admin
class UserAdmin(UserAdmin):
inlines = (WardMemberInline, )
admin.site.register(Ward)
# Re-register UserAdmin to get WardMember customizations
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
管理インターフェイスで新しいユーザーを作成するときに、この新しいWardMember.ward
拡張機能が必要になるようにします。現在、それは強制されていません。何が起こるかは次のとおりです。
- ワードなしでユーザーの作成が成功する
- ユーザーが成功すると他のレコードを作成する
- ユーザーを編集すると、病棟が選択されていない限り保存できなくなりました
上記の#1が失敗することを本当に望んでいます。
プロキシ オブジェクトを使用するsave()
ためにオーバーライドする方法を見つけようとしましたが、うまくいきません。User
私はシグナルを調べましたpre_save
が、ドキュメントはそれが保存を拒否するためのものではないと明示的に言っています.
正しいアプローチは何ですか?
追加情報:
- 1.4を使用しています。1.5ではユーザー クラスを拡張できるようですが、まだ 1.5 に更新する立場にはありません。
私は最終的に Django 1.5 を推し進めましたが、誰かが 1.4 で動作する貢献する最終的な回答を持っている場合に備えて、これをここに残します。