假设我有一个这样的数据模型: &Apple苹果GT;水果 - >有机
因此,Apple拥有Fruit的外键...... 和有3个字段:名称,标题,级别。 我在一列中显示3个字段作为name_title_level。 我希望能够通过单击表头来对结果进行排序。 我看过: https://djangosnippets.org/snippets/2110/ 并试了一下:import Data.Numbers.Primes
last (primeFactors 600851475143)
我没有收到任何错误,排序功能没有做任何事情。 未调用get_query_set方法。 有谁知道怎么做?
更新: 这是更新的代码。现在调用该方法,但仍然没有排序功能。我的意思是标题中根本没有链接。
models.py:
class SpecialOrderingChangeList(ChangeList):
def apply_special_ordering(self, queryset):
order_type, order_by = [self.params.get(param, None) for param in ('ot', 'o')]
special_ordering = self.model_admin.special_ordering
if special_ordering and order_type and order_by:
try:
order_field = self.list_display[int(order_by)]
ordering = special_ordering[order_field]
if order_type == 'desc':
ordering = ['-' + field for field in ordering]
queryset = queryset.order_by(*ordering)
except IndexError:
return queryset
except KeyError:
return queryset
return queryset
def get_query_set(self):
queryset = super(SpecialOrderingChangeList, self).get_query_set()
queryset = self.apply_special_ordering(queryset)
return queryset
@admin.register(Apple)
class AppleAdmin(admin.ModelAdmin):
list_display = ('x', 'get_name')
def get_name(self, obj):
return "{}_{}_{}".format(obj.fruit.organic.name,\
obj.fruit.organic.title, obj.fruit.organic.level)
special_ordering = {'name': ('fruit__organic__name', 'fruit__organic__title', 'fruit__organic__level')}
def get_changelist(self, request, **kwargs):
return SpecialOrderingChangeList
admin.py:
from django.db import models
class Organic(models.Model):
name = models.CharField(max_length=30)
title = models.CharField(max_length=30)
label = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Fruit(models.Model):
organic = models.ForeignKey(Organic)
def __unicode__(self):
return self.organic.name
class Apple(models.Model):
fruit = models.ForeignKey(Fruit)
color = models.CharField(max_length=30)
def __unicode__(self):
return self.color
答案 0 :(得分:1)
应该是
get_queryset()
不是
get_query_set()