私はユーザーモデルを拡張していますが、新しい管理フォームの使用に問題があるようです。 私はmodels.pyに次のコードを持っている:Djangoユーザーモデルのカスタマイズ時に新しい管理フォームを使用する
class Preference(models.Model):
choice = models.TextField(choices = (('grid', 'grid'), ('list','list')))
def __unicode__(self):
return self.choice
class UserProfile2(models.Model):
preference = models.ForeignKey(Preference, default = Preference.objects.get(id=2).id)
user = models.OneToOneField(User, unique=True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
print 'creating user profile2'
u = UserProfile2.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
次のコードはadmin.pyである:
class UserProfileInline(admin.TabularInline):
model = UserProfile2
fk_name = 'user'
class CustomUserAdmin(UserAdmin):
inlines = [UserProfileInline,]
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
次はsettings.pyである:
AUTH_PROFILE_MODULE = 'userextension.UserProfile2'
それユーザーが管理者の設定オブジェクトの値を制御しようとしないときに正しく動作し、デフォルト値を使用して新しいユーザーが作成されます。しかし、ユーザーが 'list'のデフォルト値から離れて代わりに 'grid'を使用しようとすると、 'key user_id重複エントリ'エラーが表示されます。
追加フィールドの管理フォームから明示的に値を取得し、userprofile2オブジェクトとユーザーオブジェクトの両方を保存する必要がありますか?もしそうなら、私は受け取ったエラーにどのように関連していますか?私はそれを行う方法について多くの文書を見つけられておらず、どんな方向性も高く評価しています。
更新: これは、あまりにも、重要なようだ:私はUserProfile2モデルに設定のデフォルト値を削除すると、私が手にエラーがあり、「列 『preference_id』 nullにすることはできません」を見て取るため
感謝を私の質問。
あなたの答えはありがたいですが、上記のデバッグステートメントは、新しいユーザーが作成されたときにのみ表示され、既存のユーザーが変更されたときには表示されません。だから、「作成された」というのはその仕様に従って動作するようです。 – user773328
よかったです。私はデバッグのためだけにFalseにユニークを設定し、インラインが新しいレコードを作成しているかどうか、または 'preference'の値を変更するときに既存のレコードを更新しているかどうかを確認します。 – Brandon