【问题标题】:Django Authentication: User Model ConflictDjango 身份验证:用户模型冲突
【发布时间】:2013-11-15 23:30:13
【问题描述】:

我有一个像 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
                          })

【问题讨论】:

  • 我不确定问题所在?使用您的自定义 User 模型和 render_to_response,您将可以访问模板中的 {{ app_user }} 变量
  • 您可以发布models.pyviews.py 和您的模板吗?
  • 已根据@HenryFlorence 请求编辑
  • @Jhakki 与User 中的views.py 对象是否存在导入冲突? import django.contrib.auth.models.User as AuthUser 会解决这个问题吗?或者也许这两个对象在我下面的答案中被链接?您发布的代码越多,它就越有用。

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


【解决方案1】:

我认为现在可以创建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

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 2012-10-06
    • 2021-12-25
    • 2012-12-06
    • 1970-01-01
    • 2020-04-13
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多