Reputation: 9610
I have following model:
class UserProfile(models.Model):
"""
User profile model, cintains a Foreign Key, which links it to the
user profile.
"""
about = models.TextField(blank=True)
user = models.ForeignKey(User, unique=True)
ranking = models.IntegerField(default = 1)
avatar = models.ImageField(upload_to="usermedia", default = 'images/js.jpg')
updated = models.DateTimeField(auto_now=True, default=datetime.now())
is_bot = models.BooleanField(default = False)
is_active = models.BooleanField(default = True)
is_free = models.BooleanField(default = True)
objects = ProfileManager()
def __unicode__(self):
return u"%s profile" %self.user
And a manager
class ProfileManager(models.Manager):
"""
Stores some additional helpers, which to get some profile data
"""
def get_active_members(self):
'''
Get all people who are active
'''
return self.filter(is_active = True)
When, I try to call something like UserProfile.obgets.get_active_members()
I am getting the
raise AttributeError, "Manager isn't accessible via %s instances" % type.__name__
AttributeError: Manager isn't accessible via UserProfile instances
Could you please help
Upvotes: 0
Views: 1722
Reputation: 10311
class ActiveUserProfileManager(models.Manager):
def get_query_set( self ):
return super( ActiveUserProfileManager , self ).get_query_set().filter(active=True, something=True)
class UserProfile(models.Model):
objects = models.Manager()
active_profiles = ActiveUserProfileManager()
UserProfile.active_profiles.all()
UserProfile.active_profiles.filter(id=1)
UserProfile.active_profiles.latest()
Upvotes: 1
Reputation: 19019
Managers are only available on model classes and not on model instances.
This will work:
UserProfile.objects
This will not:
profile = UserProfile.objects.get(pk=1)
profile.objects
In other words, if you are calling it on an instance of a UserProfile
, it will raise the exception you see. May you confirm how you are accessing the manager?
From the docs:
Managers are accessible only via model classes, rather than from model instances, to enforce a separation between "table-level" operations and "record-level" operations
Upvotes: 6