繁体   English   中英

使用Django多表继承和OneToOneField

[英]Using Django Multi-table inheritance and OneToOneField

我创建了以下模型:

学校/ 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]。

在这种情况下,是否有办法将用户“提升”为父母? 降级呢?

参考:

  1. https://docs.djangoproject.com/en/1.6/topics/db/examples/one_to_one/
  2. https://docs.djangoproject.com/en/1.6/topics/db/models/#multi-table-inheritance

我假设您正在寻找的是处理权限。 普通的django用户可以做某些事情,而Parent可以做其他事情。 那是对的吗?

在这种情况下,更好的用例是使用具有django权限的内置组。 因此,您可以创建一个名为“父母”的组。 具有一定的权限,而普通的django用户则不能做那些事情。 您可以在文档中阅读有关权限的更多信息。

如果您要向用户添加更多数据,最好将其添加到User具有OneToOneField的配置文件中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM