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?
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]
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?
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]