@@ -333,41 +333,36 @@ class User(Document):
333333 self .assertEqual (User ._fields ['username' ].db_field , '_id' )
334334 self .assertEqual (User ._meta ['id_field' ], 'username' )
335335
336- # test no primary key field
337- self .assertRaises (ValidationError , User (name = 'test' ).save )
336+ User .objects .create (username = 'test' , name = 'test user' )
337+ user = User .objects .first ()
338+ self .assertEqual (user .id , 'test' )
339+ self .assertEqual (user .pk , 'test' )
340+ user_dict = User .objects ._collection .find_one ()
341+ self .assertEqual (user_dict ['_id' ], 'test' )
338342
339- # define a subclass with a different primary key field than the
340- # parent
341- with self .assertRaises (ValueError ):
343+ def test_change_custom_id_field_in_subclass (self ):
344+ """Subclasses cannot override which field is the primary key."""
345+ class User (Document ):
346+ username = StringField (primary_key = True )
347+ name = StringField ()
348+ meta = {'allow_inheritance' : True }
349+
350+ with self .assertRaises (ValueError ) as e :
342351 class EmailUser (User ):
343352 email = StringField (primary_key = True )
353+ exc = e .exception
354+ self .assertEqual (str (exc ), 'Cannot override primary key field' )
344355
345- class EmailUser (User ):
346- email = StringField ()
347-
348- user = User (username = 'test' , name = 'test user' )
349- user .save ()
350-
351- user_obj = User .objects .first ()
352- self .assertEqual (user_obj .id , 'test' )
353- self .assertEqual (user_obj .pk , 'test' )
354-
355- user_son = User .objects ._collection .find_one ()
356- self .assertEqual (user_son ['_id' ], 'test' )
357- self .assertNotIn ('username' , user_son ['_id' ])
358-
359- User .drop_collection ()
360-
361- user = User (pk = 'mongo' , name = 'mongo user' )
362- user .save ()
363-
364- user_obj = User .objects .first ()
365- self .assertEqual (user_obj .id , 'mongo' )
366- self .assertEqual (user_obj .pk , 'mongo' )
356+ def test_custom_id_field_is_required (self ):
357+ """Ensure the custom primary key field is required."""
358+ class User (Document ):
359+ username = StringField (primary_key = True )
360+ name = StringField ()
367361
368- user_son = User .objects ._collection .find_one ()
369- self .assertEqual (user_son ['_id' ], 'mongo' )
370- self .assertNotIn ('username' , user_son ['_id' ])
362+ with self .assertRaises (ValidationError ) as e :
363+ User (name = 'test' ).save ()
364+ exc = e .exception
365+ self .assertTrue ("Field is required: ['username']" in str (exc ))
371366
372367 def test_document_not_registered (self ):
373368 class Place (Document ):
0 commit comments