Sometimes we want to query by custom filter and different orders
1 |
Product.objects.filter(name__contains='Dog').origin_filter('台灣') |
And in this case will raise AttributeError because Queryset object can not call Manager method
Solution: as_manager()
1 2 3 4 5 6 7 8 |
class ProductQuerySet(QuerySet): def origin_filter(self, name): name = name.replace('台', '臺') return self.filter(origin=name) class Product(Model): objects = ProductQuerySet.as_manager() |
More Django settings from document:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class CustomQuerySet(models.QuerySet): # Available on both Manager and QuerySet. def public_method(self): return # Available only on QuerySet. def _private_method(self): return # Available only on QuerySet. def opted_out_public_method(self): return opted_out_public_method.queryset_only = True # Available on both Manager and QuerySet. def _opted_in_private_method(self): return _opted_in_private_method.queryset_only = False |