Вы делаете это путем создания собственной промежуточной модели (вместо использования неявной модели, созданной Django):
class Video(models.Model):
...
class Course(models.Model):
...
videos = models.ManyToManyField(Video, through='CourseVideo', related_name='courses')
class CourseVideo(models.Model):
class Meta:
ordering = ['order']
course = models.ForeignKey(Course)
video = models.ForeignKey(Video)
order = models.PositiveIntegerField(default=0)
Важной частью выше является атрибут through
в ManyToManyField
.Это говорит Django использовать модель CourseVideo
, которую вы определили вместо собственной неявной версии.
Однако при этом есть несколько ошибок.Вы больше не можете использовать такие вещи, как some_course.videos.add(video)
, потому что теперь необходима дополнительная информация для создания этих отношений.Вместо этого вам нужно явно создать связь:
CourseVideo.objects.create(course=some_course, video=some_video, order=1)
Более подробную информацию смотрите в документации: https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany