MongoEngine / MongoEngine/mongoengine
DynamicDocument issue for Document with inheritance
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 4.3k
- Forks
- 1.2k
- Avg merge
- 4h 41m
- Merged PRs (30d)
- 11
Description
Hi There,
I had an issue today while using DynamicDocument on a collection that makes use of some inheritance.
Note that using .exclude('_cls') is solving my problem but I thought it could be good to let you know.
Below is a reproducible scenario. BTW mongoengine is awesome, thanks for the hard work!
class Geek(Document):
meta = {'allow_inheritance': True}
name = StringField()
class AwesomeGeek(Geek):
has_laptop = BooleanField()
gk = AwesomeGeek(name='John', has_laptop=True).save()
class DynamicGeek(DynamicDocument):
meta = {'collection': 'geek'}
DynamicGeek.objects.first() # raises mongoengine.errors.FieldDoesNotExist
#The field 'has_laptop' does not exist on the document
# Geek.AwesomeGeek
DynamicGeek.objects.exclude('_cls').first() # works great
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the scenario with Geek, AwesomeGeek, and DynamicGeek, then compare DynamicGeek.objects.first() with the .exclude('_cls') variant. Trace the inheritance-related field handling and make the first query work without excluding _cls, while preserving the working behavior shown in the report.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- mongodb, python
- Domain
- database
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100