Django update queryset with annotation

前端 未结 6 597
梦谈多话
梦谈多话 2020-12-24 01:06

I want to update all rows in queryset by using annotated value.

I have a simple models:

class Relation(models.Model):
    rating = models.IntegerFiel         


        
6条回答
  •  盖世英雄少女心
    2020-12-24 01:43

    You can define your own custom objects manager:

    class RelationManager(models.Manager):
        def annotated(self,*args,*kwargs):
             queryset = super(RelationManager,self).get_queryset()
             for obj in queryset:
                   obj.rating = ... do something ...
             return queryset
    
    class Relations(models.Model):
        rating = models.IntegerField(default=0)
        rating_objects = RelationManager()
    

    Then in your code:

    q = Realation.rating_objects.annotated()
    

    Add args/kwargs to customise what this manager returns.

提交回复
热议问题