Using Model Manager on queryset

Question:

I want to do some functions from my ModelManager in my admin panel. I have:

admin.py

def change_status(modeladmin,request,queryset):
    status = queryset.change_value()
    return status

model.py

class ItemManager(models.Manager):
   @classmethod
   def change_value(cls):
       list = Item.objects.filter(value=5)
       list.update(value=6)
       return list.list_values("id", flat=True)
   

class Item(models.Model):
    name = models.TextField()
    value = models.FloatField()

    objects = ItemManager()

But I get:

QuerySet object has no attribute `'change_value'

But queryset is Item Queryset so why can’t I use manager methods?

Asked By: c0rvvv

||

Answers:

You should change your model.py module like the below:

class Item(models.Model):
    name = models.TextField()
    value = models.FloatField()

    objects = ItemManager()
    class Admin:
        manager = ItemManager()

As we expect just objects to be manager, but the admin will use manager in self.Admin.manager.

Reference:
Admin model manager [djangoproject-code]

Answered By: Javad
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.