Администратор 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 - это имя файла миграции
Это решит вашу проблему.
Ура!!