【问题标题】:How can I add fields such as company name, company website, etc to a django user form?如何在 django 用户表单中添加公司名称、公司网站等字段?
【发布时间】:2016-06-28 01:47:40
【问题描述】:

如何将公司名称和网站等字段添加到标准 django 用户身份验证表单?我已经将他们的默认字段用于用户名、密码等,但我也很想添加这些字段。我知道有几种方法可以做到这一点,但你认为最好的方法是什么? 我已经查看了有关如何执行此操作的 django 文档,但我仍然不清楚应该如何执行此操作。 任何帮助将不胜感激。 谢谢, -拉姆齐

【问题讨论】:

    标签: python django django-models django-forms web-frameworks


    【解决方案1】:

    通过创建 OneToOneField 扩展用户的最简单方法:

    class Profile(models.Model):
          user = models.OneToOneField(User,blank=True,null=True)
          phone = models.CharField(max_length=200,blank=True,null=True)
          location =  models.CharField(max_length=200,blank=True,null=True)
    

    等等 - 你的属性

    然后,当您注册新用户时,您提供 request.user 作为参数:

     profile = Profile.objects.create(user=user,phone=phone,location='')
    

    此时您的用户的额外数据可以通过以下方式访问 user.profile.phone、user.profile.location 等等,因此您可以在需要时将 Profile 模型用作表单的用户扩展。

    如果您需要访问用户的属性,请在您的个人资料模型中:

    class Profile(models.Model):
          user = models.OneToOneField(User,blank=True,null=True)
          phone = models.CharField(max_length=200,blank=True,null=True)
          location =  models.CharField(max_length=200,blank=True,null=True)
    
          @property
          def first_name(self):
             return self.user.first_name # this will give you user's property
    

    【讨论】:

    • 您好,谢谢。我对最后一步仍然有些困惑。基本上这个想法是有一个输入基本用户信息的第一个视图,然后下一个视图将具有配置文件表单/模式。我如何告诉第二个表单/网页从潜在用户列表中选择哪个用户。那有意义吗?有没有 cookie 或其他东西可以用来做这个。基本上我希望 John 在第一页注册,在第二页,表单会知道用户名 john 刚刚注册,以及他将要输入的所有信息将链接到 john 的帐户下。非常感谢。
    • 您始终可以从配置文件中引用用户并从用户中引用配置文件 - 因此,与访问名字的方式相同,您可以访问用户的其余属性(参见示例)。如果您的配置文件(包装器)是 p 而不是 p.first_name 或 p.user.first_name
    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多