Как добавить пользовательское поле в manytomany через таблицу в Django

У меня есть модель, которая имеет множество связей с другой моделью. Это создает скрытую сквозную таблицу с двумя внешними ключевыми полями предыдущих двух таблиц. Теперь я хочу добавить пользовательское поле в дополнение к существующим двум полям внешнего ключа в сквозной таблице.

Первая модель:

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

Вторая модель:

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

Автоматически созданная скрытая таблица:

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

Как добавить новое пользовательское поле?

Вы можете добавить дополнительные поля в отношениях "многие-ко-многим", используя аргумент 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)
Вернуться на верх