在我的Django项目中,我有一个用户身份验证系统。每个用户都有一个userprofile:
# 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,它的main函数返回如下内容:
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()。avatar”随机失败,没有任何解释。
模板中返回的错误是:
Unable to load the profile model, check AUTH_PROFILE_MODULE in your project settings
有时我会收到此错误,有时则不会。这很烦人。
任何提示?
答案 0 :(得分: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, }
答案 1 :(得分:0)
将以下内容添加到settings.py
AUTH_PROFILE_MODULE = 'appname.UserProfile'
这应该可以解决问题。