我有两种类型的用户模型继承自用户模型:
class User(AbstractBaseUser):
user_uuid = models.UUIDField(primary_key=True)
@property
def is_manager(self):
return hasattr(self, 'manager')
@property
def is_salesman(self):
return hasattr(self, 'salesman')
class Manager(User):
user = models.OneToOneField(User, parent_link=True, db_column='user_uuid')
class Salesman(User):
user = models.OneToOneField(User, parent_link=True, db_column='user_uuid')
现在,经理也可以成为推销员。所以我想创建管理器实例和salesman实例,它们都从相同的用户实例继承。我可以这样做:
INSERT INTO t_salesman (`user_uuid`, ...) VALUES ('{manager.user.user_uuid}', ...)
然后:
user = User.objects.get(user_uuid='{manager.user.user_uuid}')
assert user.is_manager == True
assert user.is_salesman == True
但我不能像下面那样创建推销员:
manager = Manager.objects.first()
salesman = Salesman.objects.create(user=manager.user) # thanks @Arpit Solanki
assert salesman.user_uuid == manager.user_uuid # AssertionError, create new user instance
有没有办法可以通过Django模型直接通过SQL直接在Salesman表中添加行?
任何建议都会有所帮助,谢谢!
答案 0 :(得分:0)
原因是用户参数是User对象而不是Manager对象。由于Manager模型具有用户属性,因此您可以将其传递给Salesman模型以创建具有相同用户的对象。请参阅下面的示例。
manager = Manager.objects.first()
salesman = Salesman.objects.create(user=manager.user)