我在django中有一个扩展的UserProfile模型:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#other things in that profile
Run Code Online (Sandbox Code Playgroud)
还有一个signals.py:
from registration.signals import user_registered
from models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
user_registered.connect(createUserProfile, sender=User)
Run Code Online (Sandbox Code Playgroud)
我确保信号通过以下方式注册__init__.py:
import signals
Run Code Online (Sandbox Code Playgroud)
那么应该为每个注册的用户创建一个新的UserProfile,对吧?但事实并非如此.我尝试登录时总是得到"UserProfile匹配查询不存在"错误,这意味着数据库条目不存在.
我应该说我使用django-registration,它提供user_registered信号.
重要应用程序的结构是,我有一个名为"users"的应用程序,我有:models.py,signals.py,urls.py和views.py(以及其他一些在这里无关紧要的事情) ).UserProfile类在models.py中定义.
更新:我将signals.py更改为:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile()
profile.user = user
profile.save()
post_save.connect(create_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
但现在我得到了"IntegrityError":
"列user_id不是唯一的"
编辑2:
我找到了.看起来我以某种方式注册了两次信号.此处描述了解决方法: …
我在我的应用程序中使用django-registration.我想创建具有不同配置文件的不同类型的用户.例如,一个用户是教师而另一个用户是学生.
如何修改注册以设置user_type并创建正确的配置文件?
我正在尝试使用内部/外部用户特定的配置文件创建一个内部网/外部网,具有通用的通用配置文件.我在这个网站上看了几个答案,但没有一个专门解决我想要做的事情.下面是我到目前为止的(精简版)文件.
创建配置文件模型的最佳方法是什么,每个用户类型都有子配置文件?我尽量不要求自定义身份验证后端.
我正在编写简单的网站,需要处理用户和配置文件.第一个初步想法是在用户处理中使用django的构建,但是用户模型太窄并且不包含我需要的字段.该文档提到了用户配置文件,但用户配置文件部分已从djangobook中删除,涵盖django 1.0(理想情况下,该解决方案应与django 1.2一起使用),并且Internet上充满了不同的解决方案,而不是让选择更容易(如用户模型继承,用户配置文件和django信号等).
我想知道,如何以良好,现代,快速和安全的方式来写这个.我应该尝试扩展django内置用户模型,还是应该创建自己的用户模型,以保留我需要的所有信息?您可以在下面找到工作解决方案的一些规格和期望:
请告诉我你如何在应用程序中解决这些问题,以及使用django处理用户的最佳方法是什么.任何文章/博客或代码示例的链接都非常感谢!