我在擴展用戶模型,但似乎在使用我的新管理員表單時遇到問題。 我在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「不能爲空」
感謝您抽空看看我的問題。
感謝您的回答,但我上面的調試語句僅在創建新用戶時打印,而不是在現有用戶被修改時打印。所以'創造'似乎按照規範工作。 – user773328
好的,那很好。我只是爲了調試而將唯一設置爲False,並查看內聯是否正在創建新記錄,或者在更改「首選項」的值時更新現有記錄。 – Brandon