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