Django身份验证:用户模型冲突
我有一个这样的自定义用户模型Django身份验证:用户模型冲突,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,我有一个这样的自定义用户模型类用户(models.model):我还想利用Django的内置身份验证系统(它有一个现成的用户模型)。我目前有一个应用程序头的基本模板文件,我想在其中显示登录的用户名,如下{{user.username}}这似乎工作正常,除了在响应上下文中传递自定义用户模型的模板之外 模型: class User(models.Model): first_name = models.CharField( max_length=255, ) last_na
类用户(models.model):
我还想利用Django的内置身份验证系统(它有一个现成的用户模型)。我目前有一个应用程序头的基本模板文件,我想在其中显示登录的用户名,如下{{user.username}}
这似乎工作正常,除了在响应上下文中传递自定义用户模型的模板之外
模型:
class User(models.Model):
first_name = models.CharField(
max_length=255,
)
last_name = models.CharField(
max_length=255,
)
summary = models.CharField(
max_length=4000,
blank=True,
default="",
)
模板:
<ul class="nav navbar-nav navbar-right">
<li><a href="#">{{ user.username }}</a></li>
</ul>
我认为现在可以创建
dango.contrib.auth.User
的子类,但许多来源建议创建一个UserProfile
模型,该模型链接到具有一对一关系的User
对象:
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
favourite_pizza = models.CharField(max_length=20)
#other fields here
def __str__(self):
return "%s's profile" % self.user
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
User.profile = property(lambda u: u.get_profile())
这应该允许您在模板中使用
{{app_user.username}
和{{app_user.profile.favorite_pizza}
。带有解释的代码是 我不确定这个问题?使用自定义的User
模型和render\u to\u response
您将可以访问模板中的{app\u User}
变量扫描您发布的models.py
,views.py
和您编辑的模板,佩尔@亨利佛罗伦萨request@Jhakki是否与views.py
中的User
对象存在导入冲突?是否将django.contrib.auth.models.User导入为AuthUser
修复此问题?或者像我下面的回答一样,两个对象被链接起来?你发布的代码越多,它就越有用。
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
favourite_pizza = models.CharField(max_length=20)
#other fields here
def __str__(self):
return "%s's profile" % self.user
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
User.profile = property(lambda u: u.get_profile())