gpt4 book ai didi

python - 控制 Django 继承模型中的对象创建流程

转载 作者:行者123 更新时间:2023-12-02 00:03:53 27 4
gpt4 key购买 nike

我已经阅读了一些关于继承模型和 parent_link 的 Django 文档。假设我有这些模型:

class Parent(models.Model):
#Some field goes here!
class Child(Parent):
#Some field goes here!

关于这个模式我有 3 个问题:

  1. 如果我想创建新的子对象并将现有父对象的 ID 传递给它,我应该怎么做?

  2. 如果我只想创建新的子对象并在一段时间后为该子对象创建父对象,我该怎么办?

  3. 此外,我不理解有关 parent_link 的文档:

    OneToOneField.parent_link

    When True and used in a model which inherits from another concrete model, indicates that this field should be used as the link back to the parent class, rather than the extra OneToOneField which would normally be implicitly created by subclassing.

感谢您的帮助!

更新问题假设这些模型:

class User(AbsteractBaseUser):
#Some field goes here!

class Student(User):
#Some field goes here!

class Teacher(User):
#Some field goes here!

class Employee(User):
#Some field goes here!
  1. 是否可以创建Teacher 对象并为该教师放置现有User 对象的pk?

最佳答案

你不能在 Django ORM 中这样做。因为如果你想到数据库,这是可能的,但在 OOP 中,这是不可能的。所以你不应该在 Django ORM 中使用模型继承。当您使用继承时,在数据库中的子对象中创建父对象的外键,但您无法控制它。您无法在创建时更改或设置它。如果您从数据库的角度来看,当您创建子对象时,会在数据库中创建两个对象,即一个在父对象中,一个在子对象中。您应该能够为该子对象分配另一个父对象。但是当你看到OOP的观点时,根据OOP原则,当一个child被创建时,它继承了parent的所有属性,只创建一个对象。所以没有自由为这个 child 分配另一个父对象。

您可以改用抽象模型。如果您不能删除继承,那么您可以使用 RAW SQL 来完成。否则没有任何其他选择。

如果您可以删除继承,请在父级的子级中创建一个 OnetoOneField。

关于python - 控制 Django 继承模型中的对象创建流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61223580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com