I've been wanting to make the "core" and "auth" models optional for installation, effectively removing the "django-admin.py init" command and requiring people to install "core" and "auth" explicitly.
Reasoning: It's messy for the framework to create database tables that everybody doesn't necessarily use. For instance, if somebody doesn't use the admin or need support for users, the auth app is completely unnecessary. Sames goes for the stuff in the "core" app. I have seen this criticism come up from a couple of people. However, we shouldn't make it any harder to get started using Django -- and having to install "core" and "auth" would require extra steps that aren't currently necessary. So a solution that Jacob and I came up with is introducing app dependencies. The admin app, for instance, is dependent on auth and core. The auth app is dependent on core. There are many apps in Ellington (the World Online commercial CMS built on Django) that depend on other ones. A dependency system would solve two problems: * Having to know which order to install things in. * Having to install all the dependencies before you install an app (e.g. installing auth before admin). Hence, instead of the tutorial saying "django-admin.py init", it would say "django-admin.py install admin", which would automatically install the auth app and anything else that's needed. So how is this implemented? The simplest way we could do it is a __dependencies__ variable in the __init__.py of the app. For example, this would go in django/contrib/admin/__init__.py: __dependencies__ = ('django.contrib.auth',) (This assumes auth gets moved to django.contrib.auth rather than being special-cased in django/models.) Adrian -- Adrian Holovaty holovaty.com | djangoproject.com | chicagocrime.org