R, 68, 75 7548 bytes (random) and 70 bytes (deterministic)
@Giuseppe's rejection sampling method:
function(n){while(sum(F)!=n^2)F=sample(n^2,n);F}
Golfed original:
function(n,m=combn(1:n^2,n))m[,p=sample(repsample(which(colSums(m)==n^2),*!!1:2),1))m[,p]]
Take that,The *!!1:2
business is to avoid the odd way sample
! act when the first argument has length 1.