model: class1 或 class2 如何与 class3 有关系,但两者同时没有关系?
Posted
技术标签:
【中文标题】model: class1 或 class2 如何与 class3 有关系,但两者同时没有关系?【英文标题】:how can model: class1 or class2 have relation with class3 but both Simultaneous don't have relation? 【发布时间】:2018-01-26 23:06:37 【问题描述】:我有三个班级:
类 1 与类 3 具有一对多关系;
类 2 与类 3 具有一对多关系:
第 1 类和第 2 类不相关。
如何建模这个数据库?
【问题讨论】:
【参考方案1】:选项 1
如果不需要,请将 ForeignKey
字段设置为 null。可以在clean()
方法中验证这一点。
class A(models.Model):
# ...
pass
class B(models.Model):
# ...
pass
class C(models.Model):
# ...
fkA = models.ForeignKey(A, null=True) # to null if not needed
fkB = models.ForeignKey(B, null=True) # to null if not needed
# ...
def clean(self):
# only one fk allowed
if self.fkA and self.fkB:
raise ValidationError("Relation either to A or to B - not both!")
# one fk required
if not self.fkA and not self.fkB:
raise ValidationError("Relation to A or to B required!")
选项 2
使用模型继承
class A(models.Model):
# ...
pass
class B(models.Model):
# ...
pass
class AbstractC(models.Model):
# ...
class Meta:
# ...
abstract = True
class CtoA(AbstractC)
# ...
fkA = models.ForeignKey(A)
# ...
class CtoB(AbstractC)
# ...
fkB = models.ForeignKey(B)
# ...
数据库迁移:
$ python manage.py makemigrations
$ python manage.py migrate
【讨论】:
以上是关于model: class1 或 class2 如何与 class3 有关系,但两者同时没有关系?的主要内容,如果未能解决你的问题,请参考以下文章
如果元素在 Jquery .hasClass() 函数中具有“class1”和/或“class2”
markdown .class1.class2和.class1 .class2的区别
Class.isAssignableFrom与instanceof的区别