在 Django 中使用现有用户创建从用户继承的对象
Creating objects inheriting from User with existing User in Django
我有这样的用户模型
from django.contrib.auth.models import User
class AUser(User):
# some model properties
class BUser(User):
# some model properties
这里AUser
有不同的网页界面,BUser
有不同的网页界面。如果用户在AUser
界面注册,我会这样为他创建一个用户。
auser = AUser.objects.create(username='abc', first_name='abc', last_name='cdf', email='abc@gmail.com')
auser.set_password('asdf12345')
我将在 BUser
界面中创建帐户时做同样的事情。由于 AUser
和 BUser
继承了 User
模型,它们有一个字段 user_ptr
实际上是 User
对象。
问题是如果用户已经在AUser
界面中有一个帐户,那么如果他试图在BUser
界面中使用相同的凭据登录,我将自动创建BUser
对象对他来说,但具有相同的资历。这意味着我不会创建 User
对象,但我会将 BUser
对象附加到现有 User
对象。但是我找不到像这样创建对象的方法。我试过这样做
user = User.objects.get(id=123)
buser = BUser.objects.create(user_ptr=user)
但它会尝试使用默认值创建新的 User
对象。在这种情况下,如何使用现有 User
对象创建新的 BUser
对象?
PS:虽然继承User
模型不是个好主意,但它是一个运行项目。所以我不能改变我的结构。
我不得不使用原始 sql 查询来执行此操作,因为我没有找到使用 Django ORM 执行此操作的方法。我是这样做的。
def insert_with_raw_query(table, data):
values_keys = ','.join(data.keys())
data_values = ''
for v in data.values():
if v == 'TRUE' or v == 'FALSE':
data_values += ('%s,' % v)
else:
if isinstance(v, str):
data_values += ("'%s'," % v)
else:
data_values += ('%s,' % str(v))
insert_query = 'INSERT INTO "app_{table}"({values_keys}) VALUES ({data});'.format(
table=table.lower(),
values_keys=values_keys,
data=data_values[:-1])
with connection.cursor() as cursor:
cursor.execute(insert_query)
return True
我有这样的用户模型
from django.contrib.auth.models import User
class AUser(User):
# some model properties
class BUser(User):
# some model properties
这里AUser
有不同的网页界面,BUser
有不同的网页界面。如果用户在AUser
界面注册,我会这样为他创建一个用户。
auser = AUser.objects.create(username='abc', first_name='abc', last_name='cdf', email='abc@gmail.com')
auser.set_password('asdf12345')
我将在 BUser
界面中创建帐户时做同样的事情。由于 AUser
和 BUser
继承了 User
模型,它们有一个字段 user_ptr
实际上是 User
对象。
问题是如果用户已经在AUser
界面中有一个帐户,那么如果他试图在BUser
界面中使用相同的凭据登录,我将自动创建BUser
对象对他来说,但具有相同的资历。这意味着我不会创建 User
对象,但我会将 BUser
对象附加到现有 User
对象。但是我找不到像这样创建对象的方法。我试过这样做
user = User.objects.get(id=123)
buser = BUser.objects.create(user_ptr=user)
但它会尝试使用默认值创建新的 User
对象。在这种情况下,如何使用现有 User
对象创建新的 BUser
对象?
PS:虽然继承User
模型不是个好主意,但它是一个运行项目。所以我不能改变我的结构。
我不得不使用原始 sql 查询来执行此操作,因为我没有找到使用 Django ORM 执行此操作的方法。我是这样做的。
def insert_with_raw_query(table, data):
values_keys = ','.join(data.keys())
data_values = ''
for v in data.values():
if v == 'TRUE' or v == 'FALSE':
data_values += ('%s,' % v)
else:
if isinstance(v, str):
data_values += ("'%s'," % v)
else:
data_values += ('%s,' % str(v))
insert_query = 'INSERT INTO "app_{table}"({values_keys}) VALUES ({data});'.format(
table=table.lower(),
values_keys=values_keys,
data=data_values[:-1])
with connection.cursor() as cursor:
cursor.execute(insert_query)
return True