|
并且如果与用户没有确切的一种关系, aPatron 就不可能存在。这是在数据库级别强制执行的,并由规范保证on_delete=models.CASCADE:如果User删除实例,则关联的实例Profile也将被删除。 __str__(self)我们之前见过的其他字段和函数。值得注意的是,您可以通过一对一关系来获取属性,在本例中user.username是模型函数中的属性。 为了扩展数据库关系的有用性,让我们将注意力转向) 复制 同样,我们之前已经见过其中的大部分内容,所以让我们关注新内容:models.ForeignKey。ACopy必须是单个的Book,WhatsApp 数据库 但库中Copy每个 可以有多个 s Book。Book如果库的目录中没有 a ,则A可以存在于Copy数据库中,但Copy如果没有底层 .a,则 a 不能存在Book。
这种复杂的关系用下面的行来表达: ) 复制 Patron删除行为与参考中的相同User。 Copya和 a之间的关系Patron略有不同。ACopy最多可以检出 1 个Patrons,但每个人都Patron可以检出Copy库允许的尽可能多的 s。然而,这并不是一种永久的关系,Copy有时并没有得到检验。Patrons 和Copys 在数据库中相互独立存在;删除一个实例不应删除另一个实例的任何实例。 这种关系仍然是外键的一个用例,但具有不同的参数: out_to = models.ForeignKey(Patron, blank=True, null=True, on_delete=models.SET_NULL) 复制 这里,havingblank=True允许表单接受None作为关系的值,并且null=True允许数据库中的表Patron中的关系的列接受作为值。
如果在签出实例时删除实例,则会触发删除行为,即通过将该字段设置为 null来切断关系,同时保持完整。CopynullCopyPatronCopyCopyPatron 相同的字段类型models.ForeignKey可以表达对象之间截然不同的关系。我无法完全适合该示例的一个关系是多对多字段,它类似于一对一字段,不同之处在于,正如其名称所示,每个实例都可以与许多其他实例相关每一个和每一个都可以与许多其他人相关,就像一本书如何可以有多个作者,每个作者都写了多本书。 在 Smashing 杂志上做广告 迁移 # 您可能想知道数据库如何知道模型中表达的内容。根据我的经验,迁移是一件非常简单的事情,直到它们变得不那么简单,然后它们就会吃掉你的脸。对于初学者来说,如何保持杯子完好无损:了解迁移以及如何与其交互,但尽量避免对迁移文件进行手动编辑。如果您已经知道自己在做什么,请跳过本节并继续进行适合您的操作。
|
|