如何通过Django中的表在manytomany中添加自定义字段

Nah*_*doy 3 django django-models manytomanyfield

我有一个模型与另一个模型有很多关系。这将创建一个隐藏直通表,其中包含前两个表的两个外键字段。现在,除了直通表中现有的两个外键字段之外,我想添加自定义字段。

型号一:

class ModelOne(models.Model):
    field_one = models.CharField(max_length=264)
Run Code Online (Sandbox Code Playgroud)

模型二:

class ModelTwo(models.Model):
    many_field = models.ManyToManyField(ModelOne, related_name='some_name')
    field_one = models.CharField(max_length=264)
Run Code Online (Sandbox Code Playgroud)

自动创建隐藏表:

class appname_modeltwo_modelone(models.Model):
    model_one_id= models.ForeignKey(ModelOne)
    model_two_id= models.ForeignKey(ModelTwo)
    custom_field= models.CharField(max_length=264) # New Custom Field I want to add
Run Code Online (Sandbox Code Playgroud)

如何在此处添加新的自定义字段?

Rve*_*tor 10

您可以使用 through 参数在多对多关系上添加额外的字段,以指向将根据django doc充当中介的模型

在你的例子中

class ModelOne(models.Model):
    field_one = models.CharField(max_length=264)

class ModelTwo(models.Model):
    many_field = models.ManyToManyField(ModelOne, related_name='some_name', through='IntermediateModel')
    field_one = models.CharField(max_length=264)

class IntermediateModel(models.Model):
    model_one = models.ForeignKey(ModelOne, on_delete=models.CASCADE)
    model_two = models.ForeignKey(ModelTwo, on_delete=models.CASCADE)
    custom_field = models.DateField()
    custom_field_2 = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)