django obtain related manager with unknown name -


trying make app reusable , compatible custom user models, i've encountered following issue:

let's user model following:

class member(abstractuser):     pass   # builtin user name 

as result of code django.contrib.auth.models:

class permissionsmixin(models.model):     """     mixin class adds fields , methods necessary support     django's group , permission model using modelbackend.     """     is_superuser = models.booleanfield(_('superuser status'), default=false,         help_text=_('designates user has permissions without '                     'explicitly assigning them.'))     groups = models.manytomanyfield(group, verbose_name=_('groups'),         blank=true, help_text=_('the groups user belongs to. user '                                 'get permissions granted each of '                                 'his/her group.'))     user_permissions = models.manytomanyfield(permission,         verbose_name=_('user permissions'), blank=true,         help_text='specific permissions user.')  class abstractuser(abstractbaseuser, permissionsmixin):  # <- included there     .... 

(notice many many groups doesn't define related_name.)

now, when working groups can't this:

group.user_set.add(...) 

because reverse relatedmanager name member_set.

note the model's name member in case other.

right now, i'm doing following:

getattr(group, "%s_set" % settings.auth_user_model.split('.')[-1].lower()) 

yeah, quite ugly.

question: common or bultin solution this?

edit final implementation:

@classmethod def _get_user_reverse_field_name(cls):     user = get_user_model()     cls._user_reverse_field_name = user._meta.get_field('groups').related.get_accessor_name()  @property def members(self):     if not hasattr(self, '_user_reverse_field_name'):         self._get_user_reverse_field_name()     return getattr(self, self._user_reverse_field_name) 

this should looking for:

in [1]: opts = group._meta  in [2]: django.contrib.auth import get_user_model()  in [3]: rel = [r r in opts.get_all_related_many_to_many_objects()                 if r.model == get_user_model()]  in [4]: rel out[4]: [<relatedobject: users:user related groups>]  in [5]: user_rel = rel[0]  in [6]: user_rel.get_accessor_name() out[6]: 'user_set' 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -