<p>尝试重写<code>ModelAdmin</code><code>queryset</code>方法,以向查询添加字段(通过使用queryset <a href="https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.extra" rel="nofollow">^{<cd3>}</a>方法),您可以对其进行排序,然后使用<code>admin_order_field</code>属性:</p>
<pre><code>class ThingRelationAdmin(admin.ModelAdmin):
list_display = ('related_thing1', 'related_thing1_name',
'related_thing2', 'related_thing2_name')
def queryset(self, request):
qs = super(ThingRelationAdmin, self).queryset(request)
# change appname to your application name in which this models placed
qs = qs.extra(
select = {
'rt1name': 't1.name',
'rt2name': 't2.name'
},
tables=['"appname_thing" as "t1"', '"appname_thing" as "t2"'],
where=['appname_thingrelation.related_thing1=t1.id',
'appname_thingrelation.related_thing2=t2.id']
)
return qs
def related_thing1_name(self, obj):
return obj.rt1name
def related_thing2_name(self, obj):
return obj.rt2name
related_thing1_name.admin_order_field = 'rt1name'
related_thing2_name.admin_order_field = 'rt2name'
</code></pre>