Can you give a Django app a verbose name for use throughout the admin?
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Digital Sunset Looping
--
Chapters
00:00 Can You Give A Django App A Verbose Name For Use Throughout The Admin?
00:15 Answer 1 Score 12
00:58 Accepted Answer Score 212
01:57 Answer 3 Score 13
02:16 Answer 4 Score 31
02:31 Thank you
--
Full question
https://stackoverflow.com/questions/6123...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #django
#avk47
ACCEPTED ANSWER
Score 212
Django 1.8+
Per the 1.8 docs (and current docs),
New applications should avoid
default_app_config. Instead they should require the dotted path to the appropriateAppConfigsubclass to be configured explicitly inINSTALLED_APPS.
Example:
INSTALLED_APPS = [
    # ...snip...
    'yourapp.apps.YourAppConfig',
]
Then alter your AppConfig as listed below.
Django 1.7
As stated by rhunwicks' comment to OP, this is now possible out of the box since Django 1.7
Taken from the docs:
# in yourapp/apps.py
from django.apps import AppConfig
class YourAppConfig(AppConfig):
    name = 'yourapp'
    verbose_name = 'Fancy Title'
then set the default_app_config variable to YourAppConfig
# in yourapp/__init__.py
default_app_config = 'yourapp.apps.YourAppConfig'
Prior to Django 1.7
You can give your application a custom name by defining app_label in your model definition. But as django builds the admin page it will hash models by their app_label, so if you want them to appear in one application, you have to define this name in all models of your application.
class MyModel(models.Model):
        pass
    class Meta:
        app_label = 'My APP name'
ANSWER 2
Score 31
If you have more than one model in the app just create a model with the Meta information and create subclasses of that class for all your models.
class MyAppModel(models.Model):
    class Meta:
        app_label = 'My App Label'
        abstract = True
class Category(MyAppModel):
     name = models.CharField(max_length=50)
ANSWER 3
Score 13
Well I started an app called todo and have now decided I want it to be named Tasks. The problem is that I already have data within my table so my work around was as follows. Placed into the models.py:
    class Meta:
       app_label = 'Tasks'
       db_table = 'mytodo_todo'
Hope it helps.
ANSWER 4
Score 12
Give them a verbose_name property.
Don't get your hopes up. You will also need to copy the index view from django.contrib.admin.sites into your own ProjectAdminSite view and include it in your own custom admin instance:
class ProjectAdminSite(AdminSite):
    def index(self, request, extra_context=None):
        copied stuff here...
admin.site = ProjectAdminSite()
then tweak the copied view so that it uses your verbose_name property as the label for the app.
I did it by adding something a bit like this to the copied view:
        try:
            app_name = model_admin.verbose_name
        except AttributeError:
            app_name = app_label
While you are tweaking the index view why not add an 'order' property too.