diff --git a/lib/model/model.js b/lib/model/model.js
index <HASH>..<HASH> 100644
--- a/lib/model/model.js
+++ b/lib/model/model.js
@@ -297,7 +297,12 @@ var Model = Class.extend(/** @lends Model# */ {
     this._deleteExecuted = false;
     this._inFlight = false;
 
-    _.extend(this, properties);
+    // cannot _.extend because it knows not to attempt to write properties that
+    // aren't writable. we want to write the non-writable properties, though,
+    // so that the proper exception is thrown.
+    _.forEach(properties, function(value, key) {
+      this[key] = value;
+    }, this);
   },
 
   /**
diff --git a/test/relations/belongs_to_tests.js b/test/relations/belongs_to_tests.js
index <HASH>..<HASH> 100644
--- a/test/relations/belongs_to_tests.js
+++ b/test/relations/belongs_to_tests.js
@@ -170,6 +170,12 @@ describe('Model.belongsTo', function() {
       }).to.throw(/cannot set.*authorId/i);
     });
 
+    it('does not allow use of foreign key setter via constructor', function() {
+      expect(function() {
+        Article.create({ authorId: 25 });
+      }).to.throw(/cannot set.*authorId/i);
+    });
+
     it('allows create', function() {
       var user = article.createAuthor({ username: 'jill' });
       expect(article.author).to.equal(user);
Ensuring error is thrown for using read-only property with constructor.