On 15 syys, 15:34, Russell Keith-Magee <russ...@keith-magee.com> wrote: > Hi all, > > The implementation of custom User models is now ready for final > review, prior to commit to trunk. > > The code is available in my Github repo, in the t3011 branch. > > https://github.com/freakboy3742/django/tree/t3011 > > The diff is available here: > > https://github.com/freakboy3742/django/compare/master...t3011 > > Documentation is also available in the auth topic guide: > > https://github.com/freakboy3742/django/blob/t3011/docs/topics/auth.tx... > > Barring the discovery of major problems, I'm aiming to commit this > towards the end of next week. Any and all feedback is welcome.
The above branch does not work on Python3, which seems like a blocker issue. Some questions: - If I proxy the auth.User model when it is swapped out I get an error from model validation: "AttributeError: type object 'UserProxy' has no attribute '_base_manager'". The error could be cleaner. - The last_login field is in the AbstractBaseUser, but it isn't documented as a required field. Is this field required for something? Is it needed as part of AbstractBaseUser? - There is no way to do single-table extension of the default User model. Should there be a way? To me it seems this would be beneficial when dealing with "project profiles". There is little reason I would like to store a required employee number in another table. Maybe it would work if current User was moved to AbstractUser, and User would be class User(AbstractUser): class Meta: swappable = 'AUTH_USER_MODEL'? Quick testing indicates this could work... See commit: https://github.com/akaariai/django/commit/08bcb4aec1ed154cefc631b8510ee13e9af0c19d - I did a little change to REQUIRED_FIELDS handling in conjunction with create_(super)user(). See commit: https://github.com/akaariai/django/commit/d9f5e5addbad5e1a01f67e7358e4f5091c3cad81 With the above commits I can do this: class MyUser(AbstractUser): employee_no = models.CharField(max_length=5) some_other_field = models.TextField(null=True, blank=True) REQUIRED_FIELDS = AbstractUser.REQUIRED_FIELDS + ['employee_no'] syncb & create_superuser commands work. Admin doesn't work directly, but it seems you can easily subclass the default user admin & change form to make it work. Single-table inheritance seems useful to me, and the added complexity to code isn't much. The above questions aren't meant to be commit blockers. In my (somewhat limited) testing the only real issue was the py3 incompatibility, and that seems to be an easy fix. Overall, this looks good to me. - Anssi BTW: I did also a little test to allow select_related() for user profiles: https://github.com/akaariai/django/commit/81f91db3234110b90572b25ca69b9012a475c460 - the idea is that the profile models could just to get_user_model().SELECT_RELATED_MODELS.add('user_reverse_name'). I wonder if we want something like this now/later... -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.