我正在尝试使用下面设置的模型创建一个对象:
class ModelA(models.Model)
... irrelevant data ...
class ModelB(models.Model)
fk = models.ForeignKey(ModelA, blank=True, null=True, related_name="Bs")
... irrelevant data ...
class ModelC(models.Model)
fk = models.ForeignKey(ModelB, blank=True, null=True, related_name="Cs")
... irrelevant data ...
class ModelD(models.Model)
fk = models.ForeignKey(ModelB, blank=True, null=True, related_name="Ds")
... irrelevant data ...
此模型建立了一个类似于此处所示的关系:
键:红色=ModelA,蓝色=ModelB,绿色=ModelD,灰色=ModelD
如何创建一个ModelB对象,将其自身链接到正确的ModelA对象。而不是如何创建ModelC和ModelD对象并将它们与正确的ModelB对象链接。你知道吗
我知道我能做到:
ModelA( .... data .... ).save()
但这是最简单的例子。 任何帮助都将不胜感激。你知道吗
编辑:下面是一个让你头脑清醒的数据示例。你知道吗
动物园(ModelA)有许多展品(ModelB),其中有许多动物(ModelC)和一个热水浴缸(ModelD)
也就是说,不能让一个数据库点动态指向多个表。解决方案是ModelB有一个ModelA的外键,然后您可以通过调用以下命令来找到ModelA的所有ModelB:模型A.Bs.all()
在创建包含其他对象的顶级对象时,通常最好从对其他对象依赖性最小的实体开始。你知道吗
假设您有这样一个模型:
从这个示例中可以清楚地看到,创建Mall对象并不依赖于任何其他类,因为它没有这些对象的ForeignKey。所以我们应该先在数据库中创建一个Mall对象:
既然我们有了一个商城,我们应该能够创建只依赖于有一个商城对象可用的对象。商店有一把通往商场的外国钥匙,雇员有一把通往商店的外国钥匙。因为我们还没有商店对象,所以我们需要先创建一个商店对象,然后才能创建任何Employee对象:
此时,一对多关系已经在Django中自动建立。这意味着我们现在可以键入以下内容:
现在唯一缺少的是每个商店的Employee对象:
就像以前一样,员工和商店之间自动建立一对多关系,我们可以获得特定商店的所有员工,如下所示:
在这一点上,我们还可以从顶级方式链接对数据库的访问—如果您希望从特定商店获得所有员工,您可以在特定商场执行以下操作:
我希望这能清楚地说明如何建立关系,以及创建对象的顺序。你知道吗
因此,在您的示例中,您将首先创建一个ModelA对象(类似于mymall)。然后您将使用现有的ModelA对象创建一个ModelB对象(就像我创建我的商店一样),最后您可以使用ModelB对象创建ModelC和ModelD对象(就像我对我的员工所做的那样)。你知道吗
如果你对某事不确定,请随时发表评论。你知道吗
相关问题 更多 >
编程相关推荐