0

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. ワードなしでユーザーの作成が成功する
  2. ユーザーが成功すると他のレコードを作成する
  3. ユーザーを編集すると、病棟が選択されていない限り保存できなくなりました

上記の#1が失敗することを本当に望んでいます。

プロキシ オブジェクトを使用するsave()ためにオーバーライドする方法を見つけようとしましたが、うまくいきません。User私はシグナルを調べましたpre_saveが、ドキュメントはそれが保存を拒否するためのものではないと明示的に言っています.

正しいアプローチは何ですか?

追加情報:


私は最終的に Django 1.5 を推し進めましたが、誰かが 1.4 で動作する貢献する最終的な回答を持っている場合に備えて、これをここに残します。

4

1 に答える 1