gpt4 book ai didi

django - 如何将多个模型绑定(bind)到一个 ManyToManyField?

转载 作者:行者123 更新时间:2023-12-04 01:15:34 24 4
gpt4 key购买 nike

例如,有这样的类:

class A(models.Model):
id = models.CharField(max_length=256, primary_key=True)
mtm = models.ManyToManyField(B, C, D)

class B(models.Model):
id = models.CharField(max_length=256, primary_key=True)
class C(models.Model):
id = models.CharField(max_length=256, primary_key=True)
class D(models.Model):
id = models.CharField(max_length=256, primary_key=True)

我知道该字段的实现类和错误,这样做是为了更清楚。您需要拥有该模型并且与模型 b、C、D 建立了 ManyToMany 关系。如何才能做到这一点?有专门的领域吗?

最佳答案

在撰写本文时,这是不可能的。一个 ManyToManyField [Django-doc]有一个位置 to争论:

class ManyToManyField(to, **options)

A many-to-many relationship. Requires a positional argument: the class to which the model is related, which works exactly the same as it does for ForeignKey, including recursive and lazy relationships.



这也会造成一些困惑: mtm 应该做什么?返回 some_a.mtm.all() ?所有相关 B对象? B 的元组, CD对象?反向关系的名称应该是什么?

然而,这并不意味着您不能模仿这种关系。您可以制作一个行为类似于关系的模型。事实上,如果你定义一个 ManyToManyField , Django 将创建一个存储此关系数据的表。

所以我们可以定义这样的模型:
class ABCDRel(models.Model):
a = models.ForeignKey(A, on_delete=models.CASCADE, related_name='mtm')
b = models.ForeignKey(B, on_delete=models.CASCADE, related_name='mtm')
c = models.ForeignKey(C, on_delete=models.CASCADE, related_name='mtm')
d = models.ForeignKey(D, on_delete=models.CASCADE, related_name='mtm')

例如,我们可以得到一个 QuerySet所有相关的 ABCDRelation与:
some_a.mtm.all()

或者您可以获得 QuerySet所有相关的 B通过这种关系的对象:
B.objects.filter(mtm__a=some_a)

关系可以包含额外的数据,但本质上因此存储了模型对象如何相互关联的“元组”。

因此,这创建了一个实体关系模型,或多或少类似于:

Entity-relation model of this modeling

关于django - 如何将多个模型绑定(bind)到一个 ManyToManyField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com