我正在尝试关注文档并在我的模型中设置UserProfile表,将其与管理区域中的User表关联,然后在注册时在UserProfile表中存储有关我的用户的其他信息。
在views.py
我有以下内容:
from django.contrib.auth import authenticate, login, logout
def register(request):
if request.method == 'POST':
query_dict = request.POST
username = query_dict.__getitem__("username")
email = query_dict.__getitem__("user_email")
password = query_dict.__getitem__("password")
repeat_password = query_dict.__getitem__("repeat_password")
role = query_dict.__getitem__("role")
user = User.objects.create_user(username, email, password)
# django.db.models.signals.post_save gets called here and creates the UserProfile
# I can write something like user_profile = user.get_profile() but I don't
# know how to save information to the profile.
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
login(request, user)
return HttpResponseRedirect("/")
正如您在上面的代码中的注释中所看到的,我可以检索关联的UserProfile对象,但我不知道从那里到哪里将其他数据(角色)存储在UserProfile表中。所有文件都告诉我:
get_profile() 返回此用户的特定于站点的配置文件。加薪 django.contrib.auth.models.SiteProfileNotAvailable如果 当前站点不允许配置文件,或 django.core.exceptions.ObjectDoesNotExist如果用户没有 轮廓。
您可以在此处查看:https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.get_profile
但是文档没有告诉我什么类型的对象get_profile()
返回,或者我如何使用它来存储UserProfile表中的信息。
答案 0 :(得分:4)
User.get_profile()
会返回您AUTH_PROFILE_MODULE
设置的所有内容的实例。您应将其设置为"yourapp.UserProfile"
(根据yourapp进行调整)。然后你应该可以做这样的事情:
from yourapp.models import UserProfile
profile = user.get_profile()
assert isinstance(profile, UserProfile)
profile.role = role
profile.save() # saves to DB
您实际上并不需要导入或断言行 - 这只是为了您理智地检查UserProfile
是否符合预期。
答案 1 :(得分:1)
从您关联的页面:
“请参阅下面有关存储其他用户信息的部分。”,参考https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
该部分告诉您有一个设置“AUTH_PROFILE_MODULE”,它声明了User.get_profile将返回的模型。
您还需要按照在User模型上设置post_save信号处理程序的说明,在每次创建User对象时自动创建配置文件模型的实例。如果你不这样做,那么User.get_profile()可以并且将抛出异常。