Added a possibility to define a base class for fields from a DictField (instead of using BaseField). This is important if you want to use field-based query abilities like StringField's startswith/endswith/contains. Just define `basecls´ when defining your DictField. Example:
class Test(Document):
    name = StringField()
    translations = DictField(basecls=StringField)
Without basecls defined:
> Test.objects(translations__german__startswith='Deutsch')
[]
With basecls set to StringField:
> Test.objects(translations__german__startswith='Deutsch')
[<Test: Test object>]
			
			
This commit is contained in:
		| @@ -348,6 +348,11 @@ class DictField(BaseField): | |||||||
|     .. versionadded:: 0.3 |     .. versionadded:: 0.3 | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|  |     def __init__(self, basecls=None, *args, **kwargs): | ||||||
|  |         self.basecls = basecls or BaseField | ||||||
|  |         assert issubclass(self.basecls, BaseField) | ||||||
|  |         super(DictField, self).__init__(*args, **kwargs) | ||||||
|  |  | ||||||
|     def validate(self, value): |     def validate(self, value): | ||||||
|         """Make sure that a list of valid fields is being used. |         """Make sure that a list of valid fields is being used. | ||||||
|         """ |         """ | ||||||
| @@ -360,7 +365,7 @@ class DictField(BaseField): | |||||||
|                                   'contain "." or "$" characters') |                                   'contain "." or "$" characters') | ||||||
|  |  | ||||||
|     def lookup_member(self, member_name): |     def lookup_member(self, member_name): | ||||||
|         return BaseField(db_field=member_name) |         return self.basecls(db_field=member_name) | ||||||
|  |  | ||||||
| class GeoLocationField(DictField): | class GeoLocationField(DictField): | ||||||
|     """Supports geobased fields""" |     """Supports geobased fields""" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user