Если у вас уже есть модель для B, вы можете установить ManyToMany между A и C, которая использует B в качестве сквозной модели .
Если у вас еще нетмодели для B, когда вы устанавливаете обычное отношение ManyToMany, Django автоматически создает модель, имеющую FK для A и C. При необходимости вы можете контролировать, какую таблицу использует эта автоматически сгенерированная модель (чтобы вы могли связать ее всуществующая таблица, если необходимо).
Как правило, вы только вручную определяете модель, подобную 'B', и используете ее как сквозную модель, если вам нужно хранить больше данных для каждой записи, чем просто FK для A и C. Если всеB содержит FK для A и C, поэтому лучше всего позволить Django автоматически сгенерировать эту модель из определения вашего поля ManyToMany .