复杂的Django模型关系

时间:2016-06-30 20:51:05

标签: sql django database django-models

我正在尝试构建一个用于Django的SQL数据库。我从抽象的角度理解这个模型,但是我不知道如何构建数据库以了解我是否正确地关联了这些对象。我希望保持这种抽象,以便我自己实现代码。

假设我有三种类型的对象:ABCA可以包含一个或多个BB可以以任意组合包含多个BC,但其中必须至少包含一个BCC仅包含一些数据并且是一个简单的构造。

目前我有:

from django.db import models

class A(models.Model):
    # A attributes

class B(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE)
    # B attributes

class C(models.Model):
    b = models.ForeignKey(B, on_delete=models.CASCADE)
    # C attributes

我知道这只允许CBBA之间的多对一关系,但我不知道如何允许B引用另一个B

我还希望能够轻松地编写一个表单,其中以A开头,其中至少需要一个B,并且您可以添加或删除{{1随意。这可能吗?

我认为可能只是设置这些数据的更好方法,但由于我对数据库组织不是很陌生,所以我不会看到它。

如果有帮助,我会设计一个表格,以便轻松编写游泳训练。 B是锻炼,有标题和作者。每个A都是一组。集合由" 2x50yards freestyle"等组成。或" 8x100 IM on 2:00" - B。但有时一个集合有一个子集,就像一个循环。

1 个答案:

答案 0 :(得分:1)

我强烈建议您查看有关模型的Django文档,可在此处找到:Django Models

此外,要建立对称的多对多关系,请使用:

class B(models.Model):
    bs = models.ManyToManyField("self")

此外,我建议将A和B之间的关系设置为多对多关系而不是外键。这样您就可以将B分配给多个A,同时仍允许1 A拥有许多B' s。 B和C应该采用相同的逻辑。

要回答关于为A做出B所需的问题,我认为这是不可能的。有关详细信息,请查看此问题:Django 1.7: how to make ManyToManyField required?