2016-02-08 41 views
0

请帮我解决一个问题,我尝试了很多但不幸的是找不到解决Django管理列表显示许多排序许多

我的代码是在

models.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]')   ..... 

admin.py

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 
      ....... 

我的问题将有可能使排序上tem0tem1tem2在管理列

回答

0

您可以通过创建子查询做到这一点,尝试这样

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'