#25396: ModelAdmin.get_queryset doesn't accept ValueQuerySet
-------------------------------+--------------------
Reporter: dex4er | Owner: nobody
Type: New feature | Status: new
Component: contrib.admin | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------
Django Admin crashes for following code:
models.py
{{{
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
class Meta:
verbose_name_plural = 'categories'
def __unicode__(self):
return self.name
class Note(models.Model):
user = models.ForeignKey(User)
category = models.ForeignKey(Category)
keywords = models.CharField(max_length=400)
title = models.CharField(max_length=200)
date = models.DateTimeField()
content = models.TextField(max_length=50000)
def __unicode__(self):
return self.title
class UserNotesReport(models.Model):
user = models.CharField(max_length=30, primary_key=True)
category = models.CharField(max_length=100, primary_key=True)
n = models.IntegerField()
}}}
admin.py
{{{
from django.contrib import admin
import hello_blog.models as models
from django.db.models import Count
class CategoryAdmin(admin.ModelAdmin):
pass
admin.site.register(models.Category, CategoryAdmin)
class NoteAdmin(admin.ModelAdmin):
pass
admin.site.register(models.Note, NoteAdmin)
class UserNotesReportAdmin(admin.ModelAdmin):
actions = None
list_display = ['user__username', 'category__name', 'n']
list_display_links = None
readonly_fields = ['user', 'category', 'n']
def user__username(self):
pass
def category__name(self):
pass
def get_queryset(self, request):
qs = models.Note.objects.order_by('user',
'category').values('user__username',
'category__name').annotate(n=Count('*'))
print(qs.query)
return qs
def has_add_permission(self, request):
return False
admin.site.register(models.UserNotesReport, UserNotesReportAdmin)
}}}
The fix is trivial:
{{{
diff --git a/django/contrib/admin/templatetags/admin_list.py
b/django/contrib/admin/templatetags/admin_list.py
index f4033e2..9e70f8c 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -199,7 +199,10 @@ def items_for_result(cl, result, form):
empty_value_display = cl.model_admin.get_empty_value_display()
row_classes = ['field-%s' % field_name]
try:
- f, attr, value = lookup_field(field_name, result,
cl.model_admin)
+ if isinstance(result, dict):
+ f, attr, value = None, field_name, result.get(field_name)
+ else:
+ f, attr, value = lookup_field(field_name, result,
cl.model_admin)
except ObjectDoesNotExist:
result_repr = empty_value_display
else:
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/25396>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.b97c3b59caa18a8febd09443d6d26851%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.