0

我有一个像这样的自定义用户模型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
                          })
4

1 回答 1

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 }}。带有解释的代码在这里

于 2013-11-05T11:25:03.627 回答