Ok, since you need them simultaneously, I would suggest my 2nd approach (zipping both DataLoaders).
for batch_idx, (train_batch, val_batch) in enumerate(zip(train_loader, val_loader)):
    data, target = train_batch[0], train_batch[1]
    val, target_val = val_batch[0], val_batch[1]

    # Forward call
    ....
    # Loss calculation
    acc = ...
    your_custom_loss = ...

Will this meet your needs?