Python django管理列表显示从多到多的排序

Python django管理列表显示从多到多的排序,python,django,django-admin,Python,Django,Django Admin,请帮助我解决一个问题,我尝试了很多,但不幸的是找不到解决方案 我的密码在下面 型号.py class MeasuredController(MeasuredObject): ..... tempraturemeasure = models.ManyToManyField(MeasuredTemperature, blank=True, null=True) ..... class MeasuredTemperature(Meas

请帮助我解决一个问题,我尝试了很多,但不幸的是找不到解决方案

我的密码在下面

型号.py

    class MeasuredController(MeasuredObject):
        .....
        tempraturemeasure = models.ManyToManyField(MeasuredTemperature, blank=True, null=True)
        .....


    class MeasuredTemperature(MeasuredObject):
        ......
        temperature = models.DecimalField(max_digits=6,decimal_places=1,verbose_name='Temperature[C]')         .....
    class MeasuredControllerAdmin( admin.ModelAdmin):
        list_display = ('tem0', 'tem1', 'tem2')

        def tem2(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="2").latest("senddate").temperature
            .......

        def tem1(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="1").latest("senddate").temperature
            .......

        def tem0(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="0").latest("senddate").temperature
            .......
admin.py

    class MeasuredController(MeasuredObject):
        .....
        tempraturemeasure = models.ManyToManyField(MeasuredTemperature, blank=True, null=True)
        .....


    class MeasuredTemperature(MeasuredObject):
        ......
        temperature = models.DecimalField(max_digits=6,decimal_places=1,verbose_name='Temperature[C]')         .....
    class MeasuredControllerAdmin( admin.ModelAdmin):
        list_display = ('tem0', 'tem1', 'tem2')

        def tem2(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="2").latest("senddate").temperature
            .......

        def tem1(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="1").latest("senddate").temperature
            .......

        def tem0(self, obj): 
            ...............   
            return obj.tempraturemeasure.filter(deviceindex="0").latest("senddate").temperature
            .......

我的问题是,是否可以对管理中的
tem0
tem1
tem2
列进行排序

您可以通过创建子查询来实现这一点,尝试如下

class MeasuredControllerAdmin( admin.ModelAdmin):
    list_display = ('tem0', 'tem1', 'tem2')

    def tem2(self, obj): 
        ...............   
        return obj.tempraturemeasure.filter(deviceindex="2").latest("senddate").temperature
        .......

    def tem1(self, obj): 
        ...............   
        return obj.tempraturemeasure.filter(deviceindex="1").latest("senddate").temperature
        .......

    def tem0(self, obj): 
        ...............   
        return obj.tempraturemeasure.filter(deviceindex="0").latest("senddate").temperature
        .......

    def get_queryset(self, request):
        qs = super(MeasuredControllerAdmin, self).get_queryset(request)
        qs = qs.extra(
        select = { 
            "tem2" : "<sub query for selecting the latest temp2>"),
            "tem1" : "<sub query for selecting the latest temp1>"),
sub query for query for selecting the latest temp1"),
            "temp0:"<sub query for selecting the latest temp0>")})

tem2.admin_order_field = 'tem2'
tem1.admin_order_field = 'tem1'
tem0.admin_order_field = 'tem0'
class MeasuredControllerAdmin(admin.ModelAdmin):
列表显示=('tem0'、'tem1'、'tem2')
def tem2(自身、obj):
...............   
返回对象温度测量过滤器(deviceindex=“2”).最新(“发送日期”).温度
.......
def tem1(自身、obj):
...............   
返回对象温度测量过滤器(deviceindex=“1”).最新(“发送日期”).温度
.......
def tem0(自身、obj):
...............   
返回对象温度测量过滤器(deviceindex=“0”).最新(“发送日期”).温度
.......
def get_queryset(自我,请求):
qs=super(MeasuredControllerAdmin,self).get\u queryset(请求)
qs=qs.extra(
选择={
“tem2”:“),
“tem1”:“),
用于选择最新时间段的查询的子查询1“,
“temp0:”)})
tem2.admin\u order\u字段='tem2'
tem1.admin\u order\u字段='tem1'
tem0.admin\u order\u字段='tem0'