我正在尝试构建一个用于Django的SQL数据库。我从抽象的角度理解这个模型,但是我不知道如何构建数据库以了解我是否正确地关联了这些对象。我希望保持这种抽象,以便我自己实现代码。
假设我有三种类型的对象:A
,B
和C
。 A
可以包含一个或多个B
。 B
可以以任意组合包含多个B
或C
,但其中必须至少包含一个B
或C
。 C
仅包含一些数据并且是一个简单的构造。
目前我有:
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
我知道这只允许C
→B
和B
→A
之间的多对一关系,但我不知道如何允许B
引用另一个B
。
我还希望能够轻松地编写一个表单,其中以A
开头,其中至少需要一个B
,并且您可以添加或删除{{1随意。这可能吗?
我认为可能只是设置这些数据的更好方法,但由于我对数据库组织不是很陌生,所以我不会看到它。
如果有帮助,我会设计一个表格,以便轻松编写游泳训练。 B
是锻炼,有标题和作者。每个A
都是一组。集合由" 2x50yards freestyle"等组成。或" 8x100 IM on 2:00" - B
。但有时一个集合有一个子集,就像一个循环。
答案 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?