在 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 界面中创建帐户时做同样的事情。由于 AUserBUser 继承了 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