From b23353e37639f241675d0416b4fb054d1a6b7b6a Mon Sep 17 00:00:00 2001 From: Harry Marr Date: Mon, 24 May 2010 23:03:30 +0100 Subject: [PATCH] Fixed inherited document primary key issue --- mongoengine/base.py | 9 +++++---- tests/document.py | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index 2dde93bd..c8c162b4 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -288,13 +288,14 @@ class TopLevelDocumentMetaclass(DocumentMetaclass): # Check for custom primary key if field.primary_key: - if not new_class._meta['id_field']: + current_pk = new_class._meta['id_field'] + if current_pk and current_pk != field_name: + raise ValueError('Cannot override primary key field') + + if not current_pk: new_class._meta['id_field'] = field_name # Make 'Document.id' an alias to the real primary key field new_class.id = field - #new_class._fields['id'] = field - else: - raise ValueError('Cannot override primary key field') new_class._meta['unique_indexes'] = unique_indexes diff --git a/tests/document.py b/tests/document.py index a753fa71..8bc907c5 100644 --- a/tests/document.py +++ b/tests/document.py @@ -344,6 +344,9 @@ class DocumentTest(unittest.TestCase): class EmailUser(User): email = StringField(primary_key=True) self.assertRaises(ValueError, define_invalid_user) + + class EmailUser(User): + email = StringField() user = User(username='test', name='test user') user.save()