﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
25396	ModelAdmin.get_queryset doesn't accept ValueQuerySet	Piotr Roszatycki	nobody	"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:
}}}
"	New feature	closed	contrib.admin	dev	Normal	duplicate			Unreviewed	1	0	0	0	0	0
