在 django 中使用一对一关系将用户信息管理到两个表中的最佳方法
Best way to mange user information into two tables using OneToOne Realtion in django
请指导并建议我解决此问题的最佳方法。
我有一个用户信息table:
第一个:
用户名、first_name、last_name、电子邮件、密码[由 django 提供]
第二个:
移动、parent_id 和其他用户配置文件相关详细信息[想要创建]
目标:
我想要 second table 一些字段并通过 auth_user (django 提供的名称)连接 OneToOne 关系 所以我可以通过一个对象fectch 所有字段。
我试过的
1 例
我创建了第二个 table 并连接 FK 关系并从以前的数据库下载所有以前的数据并手动分离数据并通过 CSV 上传到新的 tables.
问题: 我无法通过单个对象访问两个 table 数据。
第二种情况
所以我用 OneToOne 关系更新第二个 table。
问题: 使用此关系添加新用户非常好,但是当尝试编辑/更改以前保存的数据时出现错误
错误: 模型更改期间以 10 为底的 int() 无效文字
注意: 之前有数百名用户 table,只需使用新的数据库架构安全迁移即可。
请给我一个解决这个问题的妙招。
感谢大家。
救命恩人
code:
views.py [file]
...
@login_required()
def register(request, epin):
EPin = apps.get_model('epin', 'EPin')
if EPin.objects.filter(epin__exact=epin, is_active=1,
assigned_to=request.user.username).exists():
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
if User.objects.filter(username__exact=request.POST['parent_id']).exists():
try:
with transaction.atomic():
username = generate_username()
password = generate_password()
EPin.objects.filter(epin__exact=epin,
is_active=1).update(used_by=username, is_active=0,
used_at=datetime.now())
Profile(mobile=request.POST['mobile'],
leg=request.POST['leg'],
product_id=request.POST['product'],
parent_id=request.POST['parent_id'],
user_id=username).save()
User.objects.create_user(username=username, password=password,
email=request.POST['email'],
first_name=request.POST['first_name'],
last_name=request.POST['last_name'])
logging.getLogger('info_logger').info('U : '+username+' P : '+password)
except Exception as e:
messages.warning(request, e)
logging.getLogger('error_logger').error(e)
# try:
# user_msg = 'Username :' + username + ' and Password : ' + password
# send_mail('Successfully registered ', user_msg,
# 'no-reply@example.in', [request.POST['email']])
# except Exception as e:
# messages.warning(request, e)
# logging.getLogger('error_logger').error(e)
# try:
# user_msg = 'Username :' + username + ' and Password : ' + password
# send_message(user_msg, request.POST['mobile'])
# except Exception as e:
# messages.warning(request, e)
# logging.getLogger('error_logger').error(e)
messages.success(request,
'New User successfully created!, Username and password sent on mobile and email.')
return redirect('epin')
else:
messages.warning(request, 'Invalid Sponsor ID, User not exists')
return render(request, 'users/register.html', {'form': form})
else:
messages.warning(request, 'Not a valid E-Pin -- ' + epin)
logging.getLogger('error_logger').error(epin+' not valid')
return redirect('epin')
models.py [file]
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# user_id = models.CharField(max_length=10)
mobile = models.CharField(max_length=20)
parent_id = models.CharField(max_length=10)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.user.username}'
要将 Django 的用户模型关联为另一个模型中的外键,请使用以下命令:
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
user = models.ForeignKey(get_user_model(), help_text="User", blank=True, null=True, on_delete=models.CASCADE)
请指导并建议我解决此问题的最佳方法。
我有一个用户信息table:
第一个: 用户名、first_name、last_name、电子邮件、密码[由 django 提供]
第二个: 移动、parent_id 和其他用户配置文件相关详细信息[想要创建]
目标: 我想要 second table 一些字段并通过 auth_user (django 提供的名称)连接 OneToOne 关系 所以我可以通过一个对象fectch 所有字段。
我试过的
1 例
我创建了第二个 table 并连接 FK 关系并从以前的数据库下载所有以前的数据并手动分离数据并通过 CSV 上传到新的 tables.
问题: 我无法通过单个对象访问两个 table 数据。
第二种情况 所以我用 OneToOne 关系更新第二个 table。
问题: 使用此关系添加新用户非常好,但是当尝试编辑/更改以前保存的数据时出现错误
错误: 模型更改期间以 10 为底的 int() 无效文字
注意: 之前有数百名用户 table,只需使用新的数据库架构安全迁移即可。
请给我一个解决这个问题的妙招。
感谢大家。
救命恩人
code:
views.py [file]
...
@login_required()
def register(request, epin):
EPin = apps.get_model('epin', 'EPin')
if EPin.objects.filter(epin__exact=epin, is_active=1,
assigned_to=request.user.username).exists():
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
if User.objects.filter(username__exact=request.POST['parent_id']).exists():
try:
with transaction.atomic():
username = generate_username()
password = generate_password()
EPin.objects.filter(epin__exact=epin,
is_active=1).update(used_by=username, is_active=0,
used_at=datetime.now())
Profile(mobile=request.POST['mobile'],
leg=request.POST['leg'],
product_id=request.POST['product'],
parent_id=request.POST['parent_id'],
user_id=username).save()
User.objects.create_user(username=username, password=password,
email=request.POST['email'],
first_name=request.POST['first_name'],
last_name=request.POST['last_name'])
logging.getLogger('info_logger').info('U : '+username+' P : '+password)
except Exception as e:
messages.warning(request, e)
logging.getLogger('error_logger').error(e)
# try:
# user_msg = 'Username :' + username + ' and Password : ' + password
# send_mail('Successfully registered ', user_msg,
# 'no-reply@example.in', [request.POST['email']])
# except Exception as e:
# messages.warning(request, e)
# logging.getLogger('error_logger').error(e)
# try:
# user_msg = 'Username :' + username + ' and Password : ' + password
# send_message(user_msg, request.POST['mobile'])
# except Exception as e:
# messages.warning(request, e)
# logging.getLogger('error_logger').error(e)
messages.success(request,
'New User successfully created!, Username and password sent on mobile and email.')
return redirect('epin')
else:
messages.warning(request, 'Invalid Sponsor ID, User not exists')
return render(request, 'users/register.html', {'form': form})
else:
messages.warning(request, 'Not a valid E-Pin -- ' + epin)
logging.getLogger('error_logger').error(epin+' not valid')
return redirect('epin')
models.py [file]
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# user_id = models.CharField(max_length=10)
mobile = models.CharField(max_length=20)
parent_id = models.CharField(max_length=10)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.user.username}'
要将 Django 的用户模型关联为另一个模型中的外键,请使用以下命令:
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
user = models.ForeignKey(get_user_model(), help_text="User", blank=True, null=True, on_delete=models.CASCADE)