gpt4 book ai didi

python - 如何在 Django 中的多对多关系中向数据透视表添加更多列?

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

我有 2 个模型通过多对多关系联合起来,在本例中是策略和覆盖范围,到目前为止它工作正常,但我想向数据透视表添加另一列,因为它不适用于任何建模表(我想添加一个名为“金额”的 IntegerField,这样我就可以存储我们为该特定保险警察的特定承保范围承保了多少钱)

class Policy(models.Model):
"""Insurance Policies Model"""

number = models.CharField(max_length=25, unique=True)
company = models.OneToOneField(Company, on_delete=models.CASCADE)
client = models.OneToOneField(Client, on_delete=models.CASCADE)
start_date = models.DateField()
end_date = models.DateField()
comission = models.PositiveIntegerField()
salesperson = models.ForeignKey(Salesperson, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

rif = models.CharField(max_length=50)
phone = models.CharField(max_length=100)
class Meta:
db_table = 'policies'

class Coverage(models.Model):
"""Coverage of the different types of policies"""
name = models.CharField(max_length=55)
policies = models.ManyToManyField(Policy)
class Meta:
db_table = 'coverages'

我进行了迁移并且数据透视表制作没有问题,但我不知道如何向数据透视表添加另一个字段

最佳答案

您可以指定 through=... parameter [Django-doc]为了那个原因。事实上,如果您自己不指定这一点,Django 将自动创建一个“隐式模型”。例如:

class Policy(models.Model):
# ...

class Coverage(models.Model):
# ...
policies = models.ManyToManyField(Policy<b>, through='CoveragePolicy'</b>)

class CoveragePolicy(models.Model):
policy = models.ForeignKey(Policy, on_delete=models.CASCADE)
coverage = models.ForeignKey(Coverage, on_delete=models.CASCADE)
amount = models.IntegerField()

现在您可以在策略 p<sub>1</sub> 之间创建一个关系对象和覆盖范围c<sub>2</sub>与:

CoveragePolicy.objects.create(policy=p<sub>1</sub>, coverage=c<sub>2</sub>, amount=1)

您可以获得CoveragePolicy的相关集合策略对象 p<sub>1</sub>与:

p<sub>1</sub>.coveragepolicy_set.all()

然后检查amount及相关coverage它有。

然而,Django 在从现有模型迁移到另一个模型时会遇到麻烦,因此您可能必须删除迁移文件,并使用新模型创建一个新模型(并撤消旧模型数据库中的更改)一)。

关于python - 如何在 Django 中的多对多关系中向数据透视表添加更多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527740/

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