#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 , 12 years ago
comment:2 by , 12 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 , 12 years ago
Owner: | changed from | to
---|
comment:4 by , 12 years ago
Cc: | added |
---|---|
Has patch: | set |
Submitted pull request -- https://github.com/django/django/pull/581
Passes all tests.
comment:5 by , 12 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 , 12 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....