Django order_by sum of fields

前端 未结 3 963
陌清茗
陌清茗 2020-12-16 16:17

Is it possible to use the django ORM to order a queryset by the sum of two different fields?

For example, I have a model that looks like this:

class          


        
相关标签:
3条回答
  • 2020-12-16 16:39

    Use extra:

    Component.objects.extra(select = {'total_cost' : 'material_cost + labor_cost'},
                                       order_by = ['total_cost',])[0]
    
    0 讨论(0)
  • You can use extra for this.

    Component.objects.extra(
        select={'fieldsum':'material_cost + labor_cost'},
        order_by=('fieldsum',)
    )
    

    See the documentation.

    0 讨论(0)
  • 2020-12-16 16:44

    I think it's time to provide better answer. Since django team is considering deprecating extra(), it's better to use annotate() with F() expression:

    from django.db.models import F
    
    Component.objects.annotate(fieldsum=F('material_cost') + F('labor_cost')).order_by('fieldsum')
    

    see also https://code.djangoproject.com/ticket/25676

    0 讨论(0)
提交回复
热议问题