Администратор Django не показывает модели

Я проклят, если смогу понять, почему мои модели не отображаются в админе.

models.py выглядит так:

from django.db import models

class Publication(models.Model):
    title = models.CharField(max_length=255)

    def __unicode__(self):
        return unicode(self.title)

admin.py

from django.contrib import admin
from publications.models import Publication

admin.site.register(Publication)

settings.py

...

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
)    


INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'south',
    'publications',
)

Структура каталогов:

xrdb/
├── manage.py
├── publications
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── xrdb
    ├── __init__.py
    ├── admin.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

И на странице администратора я могу видеть Группы, Пользователи и Сайты. Нет публикаций!

Любая помощь?? Спасибо!!

EDIT: я уже синхронизирован и перенесен, а admin.autodiscover() находится в urls.py.

EDIT II: обновленные файлы выше. Добавлена ​​структура каталогов.

Ответ 1

Запустил syncdb после изменения файла models.py?

Перейдите в базовый каталог вашего проекта (где manage.py) и запустите

python manage.py syncdb

Изменить: поскольку вы уже пробовали это, добавьте в свой класс метод str или unicode:

class Resource(models.Model):

    title = models.CharField(max_length=128, blank=True)

    def __str__(self): # __str__ for Python 3, __unicode__ for Python 2
        return self.name

Edit 2: Как ни странно, я столкнулся с тем же вопросом, который сегодня работает над моими собственными проектами. Если код str выше не работает для вас, дважды проверьте, что вы действительно зарегистрировали свои модели в admin.py:

from MyApp.models import MyModel
admin.site.register(MyModel)

Изменить 3: Наконец, убедитесь, что ваш файл admin.py с указанным выше кодом находится внутри каталога соответствующего приложения (т.е. тот же каталог с вашими машинами .py, который определяет MyModel).

Ответ 2

Дважды проверьте свои права доступа: если вы считаете, что ваш пользователь является суперпользователем, просто посмотрите, чтобы убедиться! Если ваш пользователь не является суперпользователем, обратитесь к разделу "Аутентификация и авторизация" ›" Пользователи "под тем пользователем, в который вы вошли, и посмотрите, включают ли" Полномочия пользователя: "модели для рассматриваемого приложения.

Преследовав это дольше, чем мне хотелось бы признать, я понял, что мой пользователь на самом деле не является суперпользователем. Как вы увидите во многих связанных публикациях, приложение легко не отображается в Admin, если у пользователя нет необходимых прав доступа, например, здесь: enter image description here

Как вы можете видеть из этого, у пользователя 2 нет необходимых разрешений на моделях приложения "done" - только на моделях приложения "хронометраж".

Я был совершенно уверен, что это был суперпользователь (но это не так). Я полагаю, что либо я должен был уменьшить свои разрешения для устранения проблемы, с которой столкнулся другой пользователь, либо для более репрезентативного использования системы.

PS Причиной этого является то, что любая чистая база данных, в которой вы используете python manage.py createsuperuser для запуска, покажет все ваши зарегистрированные приложения/модели, в то время как существующая база данных (где разрешения могут быть более детализированы) будет отображать только некоторые из ваших зарегистрированные приложения/модели.

Ответ 3

Убедитесь, что у вас есть admin.autodiscover() в urls.py.

Ответ 4

Шаг 1: Удалите все миграции из папки миграции.

Шаг 2: перейдите в корневую директорию и введите

python manage.py makemigrations publications

Примечание: публикации здесь - ваше имя суб-приложения

xrdb # Папка главного каталога

├── xrdb # Основное приложение

├── публикации # Sub app

Шаг 3:

python manage.py sqlmigrate publications 0001

Примечание: 0001 - это имя файла миграции

Это решит вашу проблему.

Ура!!