I didn't realize I had this line in urls.py but *with Gunicorn* I have to call it TWICE to have my website working :
- Once in project/urls.py at the beginning (else it doesn't recognize project/admin/ url) - Once in project/my_website/admin.py at the end (else it doesn't recognize custom overrides in the administration panel). I guess it's a bug but I can't say why it works only with this configuration... Le mercredi 24 septembre 2014 16:56:50 UTC+2, Josh Cartmell a écrit : > > Glad that you got it working! > > admin.autodiscover is actually already included in the urls.py of > Mezzanine's project template (check out line 10), > https://github.com/stephenmcd/mezzanine/blob/master/mezzanine/project_template/urls.py > > If you create a project using the mezzanine-project command you don't need > to do anything extra. > > On Wed, Sep 24, 2014 at 10:36 AM, Jérôme Sivadier <[email protected] > <javascript:>> wrote: > >> I have finally found the answer of this completely crazy stuff looking at >> Django's documentation for Django 1.7 ! Here : >> https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.autodiscover >> >> it says that until Django 1.7 you needed to call "admin.autodiscover()" by >> yourself. And Mezzanine uses autodiscover in its LazyAdmin, but it is never >> called in Django 1.6 until the user calls it explicitly ! >> >> So as a conclusion : if you use *Django 1.6.x, add* >> admin.autodiscover() >> >> At the end of your *admin.py* application's file ! >> Hope this will help, my problem is now fixed! >> >> Le vendredi 12 septembre 2014 16:39:57 UTC+2, Stephen McDonald a écrit : >>> >>> My test app that contains my profile model is at the top of >>> INSTALLED_APPS too. The order is important, but any importance is forced >>> into place by the call to `set_dynamic_settings` at the end of the settings >>> module (I believe it forces mezzanine.boot to the top) - if you've removed >>> it, that could explain it. >>> >>> Otherwise I'd suggest trying a new project with no modifications other >>> than adding an app with a profile model, the relevant settings, and nothing >>> else. Presumably that should work - you'll then be in a position to apply >>> your changes to it step by step, until you can reproduce the error. That >>> will at least help you isolate the problem. >>> >>> Good luck. >>> >>> >>> >>> >>> On Sat, Sep 13, 2014 at 12:33 AM, Jérôme Sivadier <[email protected]> >>> wrote: >>> >>>> Maybe it's my settings.py file then :/ The order of INSTALLED_APPS and >>>> shouldn't be important, should it? >>>> Here's my order just in case : >>>> INSTALLED_APPS = ( >>>> "myApp_theme", >>>> "myApp", >>>> "django.contrib.admin", >>>> "django.contrib.auth", >>>> "django.contrib.contenttypes", >>>> "django.contrib.messages", >>>> "django.contrib.redirects", >>>> "django.contrib.sessions", >>>> "django.contrib.sites", >>>> "django.contrib.sitemaps", >>>> "django.contrib.staticfiles", >>>> "mezzanine.boot", >>>> "mezzanine.conf", >>>> "mezzanine.core", >>>> "mezzanine.generic", >>>> # "mezzanine.blog", >>>> # "mezzanine.forms", >>>> "mezzanine.pages", >>>> # "mezzanine.galleries", >>>> "mezzanine.twitter", >>>> "mezzanine.accounts", >>>> #"mezzanine.mobile", >>>> ) >>>> >>>> >>>> >>>> Le vendredi 12 septembre 2014 16:28:20 UTC+2, Stephen McDonald a écrit : >>>>> >>>>> I didn't use one. >>>>> >>>>> On Sat, Sep 13, 2014 at 12:26 AM, Jérôme Sivadier <[email protected] >>>>> > wrote: >>>>> >>>>>> Thanks for your answer. Could you post your gunicorn configuration >>>>>> file? I have certainly made some errors in this part of my project :/ >>>>>> >>>>>> Le vendredi 12 septembre 2014 16:25:12 UTC+2, Stephen McDonald a >>>>>> écrit : >>>>>>> >>>>>>> I'm unable to reproduce this - works fine for me with the same >>>>>>> gunicorn version. >>>>>>> >>>>>>> On Thu, Sep 11, 2014 at 6:40 PM, Jérôme Sivadier < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hello, >>>>>>>> >>>>>>>> I've digged for one day to find what is the problem and here is an >>>>>>>> interesting conclusion : Mezzanine was the problem because of >>>>>>>> mezzanine.boot.lazy_admin. >>>>>>>> Let me explain a bit : >>>>>>>> >>>>>>>> So I am using Mezzanine (3.0.10) + Gunicorn (19.1.1) and I >>>>>>>> discovered model registration does not have the same behaviour using >>>>>>>> the >>>>>>>> built-in Django webserver and using Gunicorn. Indeed when I use >>>>>>>> Gunicorn, >>>>>>>> all custom models calling *admin.site.unregister* and then >>>>>>>> *admin.site.register* (for instance *User*) are not updated in >>>>>>>> Django. >>>>>>>> >>>>>>>> After a lot of debugging (based on file writing), I realized that : >>>>>>>> * On the first call of *admin.site.register(User, UserAdmin)* (by >>>>>>>> Django), *django.contrib.admin.sites.AdminSite.register* is called >>>>>>>> and then *mezzanine.boot.lazy_admin.LazyAdminSite.register(User, >>>>>>>> UserAdmin)* >>>>>>>> * Then Mezzanine calls *admin.site.unregister(User)* but it >>>>>>>> doesn't go to AdminSite.unregister, it only goes to >>>>>>>> LazyAdminSite.unregister >>>>>>>> * After this, Mezzanine calls *admin.site.register(User, >>>>>>>> UserProfileAdmin)* but it doesn't go to AdminSite.register, it >>>>>>>> goes right to LazyAdminSite.register >>>>>>>> ... >>>>>>>> And so on. >>>>>>>> >>>>>>>> In the end, only Mezzanine's LazyAdminSite knows what is the "real" >>>>>>>> admin model associated with the given model class but Django does not ! >>>>>>>> Here is a trace of the register/unregister calls done by Mezzanine >>>>>>>> and Django : >>>>>>>> REGISTER <class 'django.contrib.auth.models.Group'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.auth.models.Group'> AS < >>>>>>>> class 'django.contrib.auth.admin.GroupAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'django.contrib.auth.models.User'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS < >>>>>>>> class 'django.contrib.auth.admin.UserAdmin'> >>>>>>>> calling super... >>>>>>>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS < >>>>>>>> class 'mezzanine.core.admin.SitePermissionUserAdmin'> >>>>>>>> >>>>>>>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS < >>>>>>>> class 'mezzanine.accounts.admin.UserProfileAdmin'> >>>>>>>> >>>>>>>> MEZZANINE UNREGISTER <class 'django.contrib.auth.models.User'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.auth.models.User'> AS < >>>>>>>> class 'bm_marketplace.admin.CustomUserProfileAdmin'> >>>>>>>> >>>>>>>> REGISTER <class 'django.contrib.redirects.models.Redirect'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.redirects.mode >>>>>>>> ls.Redirect'> AS <class 'django.contrib.redirects.admi >>>>>>>> n.RedirectAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'django.contrib.sites.models.Site'> >>>>>>>> MEZZANINE REGISTER <class 'django.contrib.sites.models.Site'> AS < >>>>>>>> class 'django.contrib.sites.admin.SiteAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'mezzanine.conf.models.Setting'> >>>>>>>> MEZZANINE REGISTER <class 'mezzanine.conf.models.Setting'> AS < >>>>>>>> class 'mezzanine.conf.admin.SettingsAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'mezzanine.generic.models.ThreadedComment'> >>>>>>>> MEZZANINE REGISTER <class 'mezzanine.generic.models.Thre >>>>>>>> adedComment'> AS <class 'mezzanine.generic.admin.Threa >>>>>>>> dedCommentAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'mezzanine.pages.models.Page'> >>>>>>>> MEZZANINE REGISTER <class 'mezzanine.pages.models.Page'> AS <class >>>>>>>> 'mezzanine.pages.admin.PageAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'mezzanine.pages.models.RichTextPage'> >>>>>>>> MEZZANINE REGISTER <class 'mezzanine.pages.models.RichTextPage'> >>>>>>>> AS <class 'mezzanine.pages.admin.PageAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER <class 'mezzanine.pages.models.Link'> >>>>>>>> MEZZANINE REGISTER <class 'mezzanine.pages.models.Link'> AS <class >>>>>>>> 'mezzanine.pages.admin.LinkAdmin'> >>>>>>>> calling super... >>>>>>>> REGISTER = Django's AdminSite.register() >>>>>>>> MEZZANINE REGISTER = Mezzanine's LazyAdminSite.register() >>>>>>>> >>>>>>>> >>>>>>>> So I have tried to Monkey-patch LazyAdminSite.register() by calling >>>>>>>> super on register and unregister and it basically works great on my >>>>>>>> Gunicorn installation ! But I guess it will have embarrassing >>>>>>>> consequences? >>>>>>>> Here's the working code of LazyAdminSite >>>>>>>> def register(self, *args, **kwargs): >>>>>>>> for name, deferred_args, deferred_kwargs in self._deferred: >>>>>>>> if name == "unregister" and deferred_args[0] == args[0]: >>>>>>>> self._deferred.append(("register", args, kwargs)) >>>>>>>> break >>>>>>>> #else: >>>>>>>> super(LazyAdminSite, self).register(*args, **kwargs) >>>>>>>> >>>>>>>> def unregister(self, *args, **kwargs): >>>>>>>> self._deferred.append(("unregister", args, kwargs)) >>>>>>>> super(LazyAdminSite, self).unregister(*args, **kwargs) >>>>>>>> >>>>>>>> I can provide additional information / tests if needed. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> >>>>>>>> Le mercredi 10 septembre 2014 10:50:32 UTC+2, Jérôme Sivadier a >>>>>>>> écrit : >>>>>>>> >>>>>>>>> Hello, >>>>>>>>> >>>>>>>>> I am currently working on a website based on Django (1.6.7) + >>>>>>>>> Mezzanine (3.1.10) and I am facing problems with the Admin side. >>>>>>>>> In my application I have a custom User model (named BMUser) and I >>>>>>>>> have declared it in *settings.py* like this : >>>>>>>>> AUTH_PROFILE_MODULE = "myApp.BMUser" >>>>>>>>> >>>>>>>>> On the development side, everything works great but when I go on >>>>>>>>> the production side (same code but I use postgres instead of sqlite >>>>>>>>> and >>>>>>>>> gunicorn) Mezzanine's *UserProfileAdmin* doesn't show up... I >>>>>>>>> only get Django's UserAdmin which doesn't add a reference to >>>>>>>>> "myApp.BMUser" >>>>>>>>> at the bottom of the user management. >>>>>>>>> >>>>>>>>> I have *Mezzanine.accounts* in my INSTALLED_APPS (settings.py) >>>>>>>>> and the configuration between development and production side seem to >>>>>>>>> be >>>>>>>>> the same. >>>>>>>>> >>>>>>>>> Any ideas? Thanks in advance ! >>>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Mezzanine Users" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to [email protected]. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Stephen McDonald >>>>>>> http://jupo.org >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Mezzanine Users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Stephen McDonald >>>>> http://jupo.org >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Mezzanine Users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> >>> -- >>> Stephen McDonald >>> http://jupo.org >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Mezzanine Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
