【发布时间】:2014-11-03 01:21:54
【问题描述】:
我创建了以下模型:
学校/models.py:
from django.contrib.auth.models import User
(...)
class Parent(User):
contract = models.ForeignKey(Contract)
user = models.OneToOneField(User, parent_link = True, related_name = 'school_parent')
现在我正在尝试将普通 django 用户“提升”为学校家长:
>>> from django.contrib.auth.models import User
>>> from school.models import Parent, Contract
>>> u = User(username = 'myuser')
>>> u.save()
>>> User.objects.all()
[<User: myuser>]
>>> c = Contract.objects.get(pk = 1)
>>> p = Parent(user = u, contract = c)
>>> p.save()
>>> User.objects.all()
[<User: >]
>>>
显然,在“父级”创建中,用户“myuser”正在被销毁。 Django 文档显示[1] 您可以按照我的方式通过 OneToOneField 将一个模型“附加”到另一个模型。它还说多表继承会自动创建一个 OneToOneField[2]。
在这种情况下,有没有办法将用户“提升”为父级?降级呢?
参考:
【问题讨论】:
-
为什么选择混合继承和OTO字段?有充分的理由吗?刚刚得知在 Django 中是可能的,但看不到重点..
-
继承具有隐式 OTO 字段,它们在数据库中的表示方式相同。它们之间的区别在于您访问要继承的属性的方式。带OTO:
p.user.name;继承:p.name。使继承的OTO字段显式,您可以指定它的属性,如related_name。 -
好的,谢谢你的清晰解释。
标签: python django inheritance django-models