我有2个模型,通过多对多关系进行了组合,在这种情况下,到目前为止,它的策略和覆盖范围还可以,但是我想向数据透视表中添加另一列,因为它不适用于任何建模表(我想添加一个名称为“ amount”的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, through='CoveragePolicy')

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


因此,现在您可以使用以下命令在策略p和coverage c之间创建关系对象:

CoveragePolicy.objects.create(policy=p, coverage=c, amount=1)


您可以通过以下方法获取策略CoveragePolicy的相关p对象集:

p.coveragepolicy_set.all()


然后检查amount及其相关的coverage

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

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

10-09 01:46