ユーザー モデルを拡張していますが、新しい管理フォームの使用に問題があるようです。models.py に次のコードがあります。
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'
ユーザーが管理者の設定オブジェクトの値を制御しようとせず、デフォルト値を使用して新しいユーザーを作成する場合、これは正しく機能します。しかし、ユーザーがデフォルト値の「リスト」から切り替えて代わりに「グリッド」を使用しようとすると、「キー user_id のエントリが重複しています」というエラーが発生します。
管理フォームから追加フィールドの値を明示的に取得し、userprofile2 オブジェクトとユーザー オブジェクトの両方を保存する必要がありますか? もしそうなら、それは私が受け取ったエラーにどのように関連していますか? それを行う方法についてのドキュメントはあまり見つかりませんでした。
更新: これも重要なようです: UserProfile2 モデルの設定のデフォルト値を削除すると、「Column 'preference_id' cannot be null」というエラーが表示されます
私の質問を見てくれてありがとう。