2012-06-17 25 views
0

在我的Django項目中,我有一個用戶身份驗證系統。每個用戶都有一個用戶配置文件:get_profile()在Django項目中失敗

# Extending main user profile 
class UserProfile(models.Model): 
    # Required 
    user = models.OneToOneField(User) 

    # Added fields to main user model 
    position = models.CharField(max_length=20, null=True, blank=True) 
    avatar = models.ImageField(upload_to=upload_path_handler, blank=True, default='images/avatar.png') 

class Meta: 
    app_label = 'auth' 

# handler -- Create automatically UserProfile foreign key when 
# a new user is registered. 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     # Creating UserProfile 
     UserProfile.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

嗯,我有一個context_processor.py其主函數返回是這樣的:

return {'USER_MEDIA_URL': settings.USER_MEDIA_URL, 
'DEBUG': settings.DEBUG, 
'SITE_URL': settings.SITE_URL, 
'keys_left': keys_left, 
'ownRoom': c, 
'userThumbnail': request.user.get_profile().avatar,} 

我所有的模板使用「userThumbnail」和「request.user。 get_profile()。頭像「沒有任何形式的解釋就會失敗。

模板返回的錯誤是:

Unable to load the profile model, check AUTH_PROFILE_MODULE in your project settings 

有時候,我得到這個錯誤,有時沒有。這非常煩人。

任何提示?

回答

1

這是非常煩人。

:)

如果您不需要除了創建一個配置文件來執行對post_save其他額外的任務,也許你可以從django-annoying改用AutoOneToOneField?

方法get_profile()不會創建配置文件(如果它不存在)。 (django docs)

AutoOneToOneField does

這不是一個真正的答案,但它可能會成爲您的解決方案。

from annoying.fields import AutoOneToOneField 

class UserProfile(models.Model): 

    user = AutoOneToOneField(User, verbose_name=_(u"user"), 
          on_delete=models.CASCADE, 
          related_name="profile") 

然後你的東西使用這樣的:

return { 'userThumbnail': request.user.profile.avatar, } 
0

以下添加到您的settings.py

AUTH_PROFILE_MODULE = 'appname.UserProfile'

這應該解決的問題。

+0

我忘了提,我已經添加了AUTH_PROFILE_MODULE我的settings.py。它配置得很好。正如你推薦的,我添加了'appname.UserProfile'。我還用小寫'userprofile'中的「UserProfile」來嘗試。但它仍然失敗。 –