Django中与模型继承的多对多关系

我有一个称为参数的抽象对象。参数可以是几种不同的类型。例如-数值参数,常量参数,多值参数等。每个参数可以与许多不同类型的参数相关,反之亦然。

在复习Django的有关模型继承的文档之后,我决定需要一个简单的抽象基类稍后可以在文档中找到基类的多对多关系示例。

class ParameterBase(models.Model):
    id = models.AutoField(primary_key=True)    
    description = models.CharField(max_length=200)
    sort_order = models.DecimalField(null=False, max_digits=6, decimal_places=4)

    m2m = models.ManyToManyField('self',related_name='dependent_on')

    class Meta:
        abstract = True

class ParameterConstant(ParameterBase):
    value = models.DecimalField(null=False, blank=False, max_digits=20 , decimal_places=4)

class ParameterNumeric(ParameterBase):
    minimum = models.DecimalField(null=True, blank=True, max_digits=20 , decimal_places=4)    
    maximum = models.DecimalField(null=True, blank=True, max_digits=20 , decimal_places=4)

因此,同步后,我可以看到django创建了4个表-

CREATE TABLE "calc_parameterconstant_m2m" (
    "id" serial NOT NULL PRIMARY KEY,
    "from_parameterconstant_id" integer NOT NULL,
    "to_parameterconstant_id" integer NOT NULL,
    UNIQUE ("from_parameterconstant_id", "to_parameterconstant_id")
)
;
CREATE TABLE "calc_parameterconstant" (
    "id" serial NOT NULL PRIMARY KEY,
    "description" varchar(200) NOT NULL,
    "sort_order" numeric(6, 4) NOT NULL,
    "value" numeric(20, 4) NOT NULL
)
;
ALTER TABLE "calc_parameterconstant_m2m" ADD CONSTRAINT "from_parameterconstant_id_refs_id_f893bb67" FOREIGN KEY ("from_parameterconstant_id") REFERENCES "calc_parameterconstant" ("id") DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE "calc_parameterconstant_m2m" ADD CONSTRAINT "to_parameterconstant_id_refs_id_f893bb67" FOREIGN KEY ("to_parameterconstant_id") REFERENCES "calc_parameterconstant" ("id") DEFERRABLE INITIALLY DEFERRED;

CREATE TABLE "calc_parameternumeric_m2m" (
    "id" serial NOT NULL PRIMARY KEY,
    "from_parameternumeric_id" integer NOT NULL,
    "to_parameternumeric_id" integer NOT NULL,
    UNIQUE ("from_parameternumeric_id", "to_parameternumeric_id")
)
;
CREATE TABLE "calc_parameternumeric" (
    "id" serial NOT NULL PRIMARY KEY,
    "description" varchar(200) NOT NULL,
    "sort_order" numeric(6, 4) NOT NULL,
    "minimum" numeric(20, 4),
    "maximum" numeric(20, 4)
)

现在,这显然不是我的意图-我希望也能够将每种类型的参数连接到其他类型的参数。有什么方法可以使用Django ORM和模型继承来实现此目标?

如果基本参数模型本身就是一个具有自身与多对多关系的表,并且子表与一个解除绑定的一对一关系相连,那么在数据库方面,这可能是一个很好的解决方案。

斯科特·达克沃思(Scott Duckworth)

我认为多表继承将解决您的问题。要使用它,只需abstract = TrueParameterBase.Meta子类中删除(或完全删除该子类)。

使用多表继承时,要访问特定子类的属性,Django必须知道您正在处理该子类。

例如,这将失败:

p = ParameterBase.objects.get(...)  # get a ParameterBase that is a ParameterConstant
print p.value

相反,您将必须执行以下操作:

p = ParameterConstant.objects.get(...)
print p.value

或这个:

p = ParameterBase.objects.get(...)  # get a ParameterBase that is a ParameterConstant
print p.paramaterconstant.value

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取涉及Django中多对多关系的对象列表

来自分类Dev

在Django模型中订购多对多关系

来自分类Dev

如何在Django中从多对多关系中检索数据

来自分类Dev

在Django的多对多关系中获得额外的字段值

来自分类Dev

过滤模型,然后加入多对多关系

来自分类Dev

在Django中批量创建具有多对多关系的对象

来自分类Dev

在Django的多对多关系中从查询集中排除对象

来自分类Dev

在Django ORM多对多关系中为对象分配标签

来自分类Dev

如何在laravel模型中定义多对多关系?

来自分类Dev

如何从多对多关系的属性中获取Django查询的值?

来自分类Dev

创建或更新更新Django Graphene中的多对多关系

来自分类Dev

Django中的.add()方法未添加的多对多关系条目

来自分类Dev

在自身模型中建立多对多关系

来自分类Dev

Django Auth:如何创建多对多关系模型?

来自分类Dev

Django中的多对多关系

来自分类Dev

如何从多对多关系的属性中获取Django查询的值?

来自分类Dev

在Django模型中订购多对多关系

来自分类Dev

Django:通过=与独立模型的多对多关系

来自分类Dev

具有多对一或无关系与多对多关系的Django模型?

来自分类Dev

CakePHP模型中的多对多关系问题

来自分类Dev

如何在Django中过滤多对多关系

来自分类Dev

Django:多对多关系模型定义

来自分类Dev

与Django,Python的多对多关系

来自分类Dev

Django:在多模型中查询一对多关系以查找具有某些属性的现有关系

来自分类Dev

如何在Django中以双向多对多关系从两个模型中获取数据

来自分类Dev

在 Django 中嵌套多对多关系

来自分类Dev

Django 多对多关系

来自分类Dev

Django - 查询以检查多对多关系字段中的项目

来自分类Dev

Django) 如何在多对多关系中查询另一个模型的字段

Related 相关文章

  1. 1

    如何获取涉及Django中多对多关系的对象列表

  2. 2

    在Django模型中订购多对多关系

  3. 3

    如何在Django中从多对多关系中检索数据

  4. 4

    在Django的多对多关系中获得额外的字段值

  5. 5

    过滤模型,然后加入多对多关系

  6. 6

    在Django中批量创建具有多对多关系的对象

  7. 7

    在Django的多对多关系中从查询集中排除对象

  8. 8

    在Django ORM多对多关系中为对象分配标签

  9. 9

    如何在laravel模型中定义多对多关系?

  10. 10

    如何从多对多关系的属性中获取Django查询的值?

  11. 11

    创建或更新更新Django Graphene中的多对多关系

  12. 12

    Django中的.add()方法未添加的多对多关系条目

  13. 13

    在自身模型中建立多对多关系

  14. 14

    Django Auth:如何创建多对多关系模型?

  15. 15

    Django中的多对多关系

  16. 16

    如何从多对多关系的属性中获取Django查询的值?

  17. 17

    在Django模型中订购多对多关系

  18. 18

    Django:通过=与独立模型的多对多关系

  19. 19

    具有多对一或无关系与多对多关系的Django模型?

  20. 20

    CakePHP模型中的多对多关系问题

  21. 21

    如何在Django中过滤多对多关系

  22. 22

    Django:多对多关系模型定义

  23. 23

    与Django,Python的多对多关系

  24. 24

    Django:在多模型中查询一对多关系以查找具有某些属性的现有关系

  25. 25

    如何在Django中以双向多对多关系从两个模型中获取数据

  26. 26

    在 Django 中嵌套多对多关系

  27. 27

    Django 多对多关系

  28. 28

    Django - 查询以检查多对多关系字段中的项目

  29. 29

    Django) 如何在多对多关系中查询另一个模型的字段

热门标签

归档