Monday, May 2, 2016

Re: Django Multiple User Profiles Best Practices

On Apr 6, 2016, at 9:41 PM, Sudhanshu Shekhar <sudshekhar02@gmail.com> wrote:

Hi,

I am creating a tutor-student forum using Django. For which I need to have two different user profiles, one for students and one for teachers. However, I am unsure about the best way to do this. I am currently following the below approach:

class UserProfile:
 user
= models.OneToOneField(User, reverse_name="profile")
 
#other common Attributes
 
class Meta(object):
   
abstract = true

class TutorProfile():
 
#tutor fields
 
class Meta(object):
   
abstract = true

class StudentProfile():
 
#student fields
 
class Meta(object):
   
abstract = true

class Profile(TutorProfile, StudentProfile, UserProfile):
 
pass


The idea is taken from the Django best practices book. However, I am curious if there is any other way with lesser space usage. Any thoughts?

PS: I also asked the same question on stackoverflow : http://stackoverflow.com/questions/36404889/django-multiple-user-profiles-with-class-based-views-best-practices but didn't get any responses.

First of all, I don't like multiple inheritance.  You are in control of all of the parent classes, so it might not blow up in your face, but there still night be problems down the line.  Second, I think this might be the same as just creating a single class with all of the fields, so there's no reason to create three abstract classes for it to inherit from.

How old is the Django best practices book you are using?  Because starting with 1.5, you should be using a custom User model instead of a constant profile.

What I would do, and I'd love to hear some debate about it, is put most (or all, depending on requirements) of the fields from the UserProfile in the new custom user model, and have two not-abstract profiles with one-to-one fields to the user.  If the things in UserProfile don't make sense for all users, then make three profiles which all point to the custom user model.

Peter of the Norse



No comments:

Post a Comment