2011-03-02 35 views
1

給予代碼:Django的子類用戶配置問題

from django.contrib.auth.models import User 

class UserProfile(models.Model): 
    # project userprofile, also set as AUTH_PROFILE_MODULE 
    user = models.ForeignKey(User, unique=True) 

class AppUserProfile(UserProfile): 
    # some app specific extension 

和測試:

user = User.objects.create() 
profile = UserProfile.objects.get_or_create(user=user) 
AppUserProfile.objects.create(user=user) 

失敗的最後一行,他說:

IntegrityError: column user_id is not unique 

我懷疑那是什麼Django使用與ForeignKey定義的user-userprofile和user-anotheruserprofile關係相同的表。

我該如何解決這個問題?

回答

1

錯誤的原因是您正在創建具有相同user_id的兩個UserProfile-s。您正在使用「多表繼承」,因此您只需調用AppUserProfile.objects.get_or_create(user = user),它將按預期工作。

Django Models的文檔說明它很不錯。

+0

好的,我明白這個問題,但我會這樣問:如果我有UserProfile(來自request.user.get_profile),我怎樣才能到達AppUserProfile對象)? – alexef 2011-03-03 13:53:59

+0

我正在搜索的內容未實現:http://code.djangoproject.com/ticket/7623 – alexef 2011-03-03 19:23:07

+0

如果我正確理解文檔,它應該作爲UserProfile實例的屬性提供,profile.appuserprofile在您的案例中。 – sect2k 2011-03-03 21:12:50