Skip to main content
 首页 » 编程设计

python之Django:向 django-registration 添加另一个字段

2024年11月01日19JustinYoung

我是 django 的新手,我对 django-registration 很迷茫。目前我已经设置了 django 注册,但我需要为它添加另一个字段以获取电话号码。我需要注册字段中的电话号码字段,这样我就可以使用 twilio 的 api 通过文本而不是电子邮件发送验证链接。我将如何将这一字段添加到 django-registration?

请您参考如下方法:

我在工作中使用 django,对于我们过去常常将模型附加到用户的那种问题,例如:

  • 您创建一个新模型,例如为用户创建带有 OneToOneField 的配置文件
  • 将您想要的字段添加到该配置文件模型中,例如(tlf、国家/地区、语言、日志...)
  • 创建 admin.py 来管理这个模型(配置文件),同时在 django admin 中管理用户

配置文件模型示例

class Profile(models.Model): 
    user = models.OneToOneField(User) 
    phone = models.CharField(max_length=255, blank=True, null=True, verbose_name='phone') 
    description = models.TextField(blank=True, verbose_name='descripction') 
    ... 
    ... 
    class Meta: 
        ordering = ['user'] 
        verbose_name = 'user' 
        verbose_name_plural = 'users' 

admin.py 示例

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals     
from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 
 
 
class ProfileInline(admin.StackedInline): 
    model = Profile 
    can_delete = False 
    filter_horizontal = ['filter fields']  # example: ['tlf', 'country',...] 
    verbose_name_plural = 'profiles' 
    fk_name = 'user' 
 
class UserAdmin(UserAdmin): 
    inlines = (ProfileInline, ) 
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff') 
    list_filter = ('is_staff', 'is_superuser', 'is_active') 
 
admin.site.unregister(User)  # Unregister user to add new inline ProfileInline 
admin.site.register(User, UserAdmin)  # Register User with this inline profile 

创建一个用户并为其附加个人资料

# Create user 
username = 'TestUser' 
email = 'test@example.com' 
passw = '1234'   
new_user = User.objects.create_user(username, email, passw) 
 
# Create profile 
phone = '654654654' 
desc = 'Test user profile' 
new_profile = Profile(user=new_user, phone = phone, description=desc) 
new_profile.profile_role = new_u_prole 
new_profile.user = new_user 
 
# Save profile and user 
new_profile.save() 
new_user.save() 

现在您将把这个 Profile 模型附加到每个用户,您可以将您想要的字段添加到 Profile 模型,例如,如果您:

user = User.objects.get(id=1)

您可以通过以下方式访问他的个人资料:

user.profile

访问手机

user.profile.phone