#19432 closed Cleanup/optimization (fixed)
Using get_object_or_404 on a class that isn't a Django model could result in a more obvious error message.
| Reported by: | Kit Sunde | Owned by: | BHold | 
|---|---|---|---|
| Component: | Core (Other) | Version: | 1.4 | 
| Severity: | Normal | Keywords: | |
| Cc: | BHold | Triage Stage: | Accepted | 
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | yes | UI/UX: | no | 
Description
I have a Calendar model in my app but I wrongly imported calendar.Calendar from python instead which resulted in:
type object 'Calendar' has no attribute '_default_manager'
Which led me to think it was this issue: https://code.djangoproject.com/ticket/10405 perhaps it would be possible to raise a ValueError if get_object_or_404 receives something that is not of the correct type with "type object 'Calendar' is not a Django Model".
In _get_queryset it seems like it should raise a ValueErorr if it is not a Model, Manager, or QuerySet if that is what it expects, rather than to assume it is a Model if it's not the other two as it is now.
Or perhaps it was just PEBCAK on my part. :)
Change History (7)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
| Component: | Uncategorized → Core (Other) | 
|---|---|
| Easy pickings: | set | 
| Triage Stage: | Unreviewed → Accepted | 
| Type: | Uncategorized → Cleanup/optimization | 
It wouldn't cost much to wrap the klass._default_manager line into a try... except clause.
comment:3 by , 13 years ago
| Owner: | changed from to | 
|---|
comment:4 by , 13 years ago
| Cc: | added | 
|---|---|
| Has patch: | set | 
Submitted pull request -- https://github.com/django/django/pull/581
Passes all tests.
comment:5 by , 13 years ago
Thanks! I think you only missed the case where a non-model class name is passed to get_object_or_404. I will just add that and commit the patch.
comment:6 by , 13 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | new → closed | 
I'm sorry, I'm not sure, but I think that this is not an issue...
That error "type object 'Calendar' has no attribute '_default_manager'" obviously makes me think that passed object is of wrong type....