Sure. But will how will users be guided to making that distinction when developing their pluggable apps? I haven't seen anything that would prevent developers from doing this, and if the admin itself does it, isn't that a green light for everyone to do it?
Another problem with pluggable apps (like the admin) adding fields to the `User` model is that they make an assumption that *every* user is a user of that particular pluggable app. I use the admin, but not *every* user has access to the admin. Those users shouldn't need to have values (even default values, e.g. is_staff=False) for admin-specific fields, and admin-specific fields shouldn't be selected every time any user is retrieved from the database. Cheers. Tai. On 11/04/2012, at 8:05 AM, Donald Stufft wrote: > I think swappable user models should be used as a replacement for > get_profile() not per app profiles. > > It should be used for generic-esque data about a User. e.g. Email, phone > number, name, etc. > > It should not be used for app specific data about a user, e.g. Default > Gallery, Notification Settings, etc. > On Tuesday, April 10, 2012 at 6:01 PM, Tai Lee wrote: > >> Alex, >> >> I think the problem with this aspect of your proposal is that it signals a >> green light for other pluggable apps to follow Django's lead and provide >> mixing which must be added to their `User` model in order to use the >> pluggable app, instead of creating a profile model for their pluggable app. >> >> Django's admin is a pluggable app, and it should follow the best practices >> that we recommend for authors of other pluggable apps. >> >> It has been suggested that "nothing is stopping pluggable app authors from >> continuing to use profiles", but on the flip side, nothing is going to stop >> them from using mixins and requiring a schema migration to install their >> pluggable app. >> >> If we allow swappable models, we should strongly recommend (in >> documentation, and by example with the admin) that pluggable app authors >> continue to use profiles, and that only project authors use the ability to >> swap in a new `User` model for their own purposes, and not to support a >> pluggable app. >> >> Cheers. >> Tai. >> >> >> On 11/04/2012, at 3:25 AM, Alex Ogier wrote: >> >>> Tom, >>> >>> I proposed mixins to solve the specific problem: there is an app that needs >>> a specific contract from a model it wants to authenticate or otherwise >>> interact with, how can we make it easy for developers to implement that >>> contract? >>> >>> Most apps don't actually need that much though. There are a bunch of >>> standard ways to relate to a model that don't invasively change it. They >>> are all still available, and in fact preferred because no matter how easy >>> it is to use a mixin, doing nothing is even easier. >>> >>> Best, >>> Alex Ogier >>> >>> On Apr 10, 2012 10:58 AM, "Tom Evans" <tevans...@googlemail.com> wrote: >>>> On Tue, Apr 10, 2012 at 3:13 PM, Ian Lewis <ianmle...@gmail.com> wrote: >>>> > Hi, >>>> > >>>> > I'm not getting why you *have* to add fields to the User model to store >>>> > data >>>> > pertaining to the user. There is nothing in the proposal for pluggable >>>> > user >>>> > models that says you can never have a seperate model with a foreign key >>>> > to >>>> > the user model. It just means that you can define your user model the way >>>> > you want it to be. >>>> >>>> That is perfectly fine. The problem comes when there is a simple >>>> system to add fields to the user model, people will use it to add >>>> fields to the user model in their pluggable apps, for 'simplicity' and >>>> 'ease of use'. >>>> >>>> > Why can't third party apps have a model with a foreign key to the user >>>> > table >>>> > with the pluggable models approach? I imagine you are right that every >>>> > app >>>> > and it's brother adding fields to the user model is not realistic but I >>>> > don't think that anyone has proposed that. Certainly not me. >>>> >>>> The proposed solution as decided by BDFL diktat is 2a from [1]. I quote: >>>> >>>> Split off as much as possible of auth.User into orthogonal mixins that >>>> can be reused. >>>> Modify auth.User to inherit these mixins. Care must be taken to ensure >>>> that the database expression of the new User model is identical to the >>>> old User model, to ensure backwards compatibility. >>>> Unrelated and third-party apps can indicate that they depend on >>>> various orthogonal mixins. For example, contrib.admin can specify that >>>> it works with auth.User out of the box, and with any model >>>> implementing PermissionsMixin if you supply your own login forms. >>>> >>>> At the moment, you cannot change the user model, so we do not have >>>> issues relating to third party apps changing the user model. With the >>>> proposed solution, you would be able to change the user model, so we >>>> may have issues. >>>> >>>> It's also enlightening to read the code from Alex's Django branch, >>>> which is an initial implementation of option 2a. >>>> >>>> > The thing I >>>> > want to be able to is define user models suitable for my project. Third >>>> > party apps adding their own fields wasn't proposed by anyone AFAIK, nor >>>> > was >>>> > specifically requiring that you add them yourself. Some might require >>>> > that >>>> > your user has something like an 'email' field because that would be a >>>> > common >>>> > field across apps but app specific data can easily go on a seperate model >>>> > included with the app that simply has a FK to user. You can then only >>>> > fetch >>>> > that data on requests that need it. >>>> > >>>> > I'm sorry but doing a JOIN every request is a BAD idea. You will run into >>>> > problems there quickly and have no way out of it besides ditching auth >>>> > completely (and thus all the thirdparty apps you use that depend on it). >>>> >>>> I completely disagree, but I'm not here to try and convince people how >>>> to design their databases. A JOIN every request will not end the >>>> world. Besides, it is far more likely to be a separate query than a >>>> JOIN, and would only happen on views that required that data. >>>> >>>> More to the point, what basis are you making this claim on? People >>>> love to pipe up "JOINs are slow and evil", but have you actually >>>> analysed the cost compared to monolithic tables? >>>> >>>> > Assuming the user table and profile tables are small is awfully short >>>> > sighted. >>>> >>>> To be fair, I was slightly ambiguous with my use of the word 'small'. I >>>> said: >>>> >>>> >> Queries against monolithic tables are much slower than a few queries on >>>> >> much >>>> >> smaller tables. >>>> >>>> Here 'small' means fewer columns, not less tuples. >>>> >>>> However, assuming tables will be small is precisely what you have just >>>> done - "we must not have JOINs, they are evil, but it doesn't matter >>>> because the user table will only have the columns I desire". I agree >>>> that it is a short sighted position, if you do not prevent the table >>>> becoming monolithic ;) >>>> >>>> >>>> Cheers >>>> >>>> Tom >>>> >>>> [1] https://code.djangoproject.com/wiki/ContribAuthImprovements >>>> >>>> -- >>>> 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. >>>> >>> >>> >>> -- >>> 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. >> >> >> -- >> 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. > > > -- > 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. -- 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.