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

标签 python django python-3.x many-to-many

我有 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/

相关文章:

django - 多个 django 项目、mod_wsgi、单域

python - Pandas 需要一个 Str 对象但收到一个 float

python - 我在哪里可以找到好的在线 Python 类(class)?

python - VSCode v1.35 - 运行时错误 : CMake must be installed to build the following extensions: dlib

python - python `except` 可以匹配链中的所有错误吗?

python - Google BigQuery WRITE_TRUNCATE 删除所有数据

python - 读取 Unicode 文件 - Python3.2

python - 使用discord.py重写创建即时邀请,似乎无法没有错误

Django 从 docker 容器发送邮件

python - Django Haystack-Xapian 搜索因特殊字符和空格而失败