Opened 11 years ago
Last modified 11 years ago
#24689 closed Bug
DetailView & ListView get_template_name fails with deferred QuerySet — at Initial Version
| Reported by: | Bertrand Bordage | Owned by: | nobody |
|---|---|---|---|
| Component: | Generic views | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | yes | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Suppose you define a view like this:
from django.views.generic import DetailView
from django.contrib.auth.models import User
class UserDetail(DetailView):
model = User
queryset = User.objects.defer('password')
If you try to use the view, the default template name is auth/user_deferred_password_detail.html instead of auth/user_detail.html.
This is because Django creates a proxy model each time you use defer/only. And therefore User.objects.defer('password')[0]._meta.model_name is 'user_deferred_password'.
(DetailView|ListView).get_template_name should ckeck if model._deferred and use model._meta.proxy_for_model to get the original model.
Note:
See TracTickets
for help on using tickets.