Django身份验证:用户模型冲突

时间:2013-11-05 06:29:04

标签: django django-models django-templates django-views

我有一个像这样的自定义用户模型class User(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>

以下是查看方法:

   app_user = User.objects.get(pk=request.session['user_id'])
   ...

   return render_to_response('common-dashboard.html',
                          {'app_user': app_user,
                           'entry': entry
                          })

1 个答案:

答案 0 :(得分:0)

我认为现在可以创建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.favourite_pizza }}。带有解释的代码是here

相关问题