nn.Linear is transposing the weights 1 before multiplication so the two networks are equivalent.
To match the params shapes and the behaviour of nn.Linear you have to do:
class ModelOne(nn.Module):
  def __init__(self):
    super().__init__()
    self.weights = nn.Parameter(torch.randn(10, 300))
    self.bias = nn.Parameter(torch.zeros(10))
  def forward(self, x):
    return x @ self.weights.t() + self.bias