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的区别

Java isAssignableFrom()方法与instanceof()方法区别

Java isAssignableFrom()方法与instanceof()方法区别