Модель не отображается в админке django

Я создал несколько приложений и материалов для django для своего собственного фонда, и до сих пор все работало нормально.

Сейчас я только что создал новый проект (django 1.2.1) и столкнулся с проблемой с первых минут.

Я создал новое приложение - игру и новую модель Game. я создал admin.py и поместил в него похожие материалы. Запустил syncdb и пошел проверять админа. Модель не появилась там.

Я приступил к проверке, двойной проверке и прочтению предыдущих аналогичных тем: Зарегистрированные модели не отображаются в приложении администратора. Приложение Django не отображается в интерфейсе администратора.

Но, насколько я могу судить, они мне тоже не помогают. Возможно, кто-то еще может указать на это для меня.

models.py в игровом приложении:

# -*- coding: utf-8 -*-
from django.db import models

class Game(models.Model):
      type = models.IntegerField(blank=False, null=False, default=1)
      teamone = models.CharField(max_length=100, blank=False, null=False)
      teamtwo = models.CharField(max_length=100, blank=False, null=False)
      gametime = models.DateTimeField(blank=False, null=False)

admin.py в игровом приложении:

# -*- coding: utf-8 -*-
from jalka.game.models import Game
from django.contrib import admin

class GameAdmin(admin.ModelAdmin):
      list_display    = ['type', 'teamone', 'teamtwo', 'gametime']

admin.site.register(Game, GameAdmin)

настройки проекта.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',
)

ROOT_URLCONF = 'jalka.urls'

TEMPLATE_DIRS = (
      "/home/projects/jalka/templates/"
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'game',
)

urls.py:

from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
      # Example:
      # (r'^jalka/', include('jalka.foo.urls')),
      (r'^admin/', include(admin.site.urls)),
)

Алан.

32 ответа

Решение

Хмммм... Попробуйте изменить включение вашего приложения в settings.py:

От:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'game',
    ....

Для того,чтобы:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'YOUR_PROJECT.game',# OR 'YOUR_PROJECT.Game'

Проблема может быть вызвана тем, что вы пропустили регистрацию моделей для сайта администратора. Это можно сделать, создав admin.py файл под вашей заявкой, и там регистрация моделей с помощью:

admin.site.register(MyModel)

Была такая же проблема с Django 2.0.

Следующий код не работает:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from users import models

admin.register(models.User, UserAdmin)

Получается линия

admin.register(models.User, UserAdmin)

должно было

admin.site.register(models.User, UserAdmin)

Так как я не получил никаких предупреждений, просто хотел указать на эту вещь и здесь.

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

мой INSTALLED_APPS выглядело так:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',  # <---- this is my custom app
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'south',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Видите, я поставил свое приложение перед приложением администратора Django, и, очевидно, оно загружает их в таком порядке. Я просто переместил свое приложение прямо под админом, и оно начало появляться:)

Я была такая же проблема. Все сделали правильно. Но у меня не было разрешения на просмотр модели.

Просто дайте необходимое разрешение (просмотр / добавление / редактирование / и т. Д.), А затем снова проверьте.

Разрешить через админку:

  1. Войдите на сайт, используя учетные данные своей учетной записи суперпользователя.
  2. На верхнем уровне сайта администратора отображаются все ваши модели, отсортированные по «приложению Django». В разделе «Аутентификация и авторизация» вы можете щелкнуть ссылки «Пользователи» или «Группы», чтобы просмотреть существующие записи.
  3. Выберите и добавьте необходимое разрешение

Выберите и добавьте необходимое разрешение

обратитесь к этому, чтобы добавить / изменить разрешение через панель администратора

Альтернатива: использование кода см. Официальный документ Django.

Для Django 1.10 мне помогли зарегистрировать Модель следующим образом с (admin.ModelAdmin) в конце

from django.contrib import admin

from .models import YourModel
admin.register(YourModel)(admin.ModelAdmin)

Это, вероятно, очень редко, но у меня была проблема сегодня, когда разрешения на файл admin.py, который я создал, были повреждены и, таким образом, сделали его нечитаемым для django. Я удалил файл и воссоздал его с успехом.

Надеюсь, что это кого-то спасет, если они столкнутся здесь с моей проблемой.

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

Моя установка - именно то, что написано в руководстве Django -

models.py

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

admin.py

from .models import xxx
admin.site.register(xxx)

Я пользуюсь цифровым океаном и тоже столкнулся с этой проблемой. Решением был перезапуск службы. я использовал

перезапуск службы Gunicorn

и что есть модель, чтобы показать

Я была такая же проблема. Некоторые из моих моделей не отображались в панели управления администратора django, потому что я не зарегистрировал эти модели в моем файле admin.py.

      //Import all the models if you have many

from store.models import *

admin.site.register(Order)
admin.site.register(OrderItem)

Это исправило это для меня. Просто зарегистрируйтесь и обновите свою веб-страницу, и модели будут видны на панели администратора.

Мне просто пришлось перезапустить службу apache. перезапуск службы apache2. Потом появились новые модели.

вам просто нужно зарегистрировать свою модель. попали в файл admin.py того же приложения и напишите,

      from .models import "Modelname"

admin.site.register(("Modelname")) 
#create tuple to register more than one model

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

Подобно:

from jalka.game.models import Game
from django.contrib import admin

admin.site.register(Game)

Окружающая среда: Win10、Django 1.8

Джанго

У меня была такая же проблема, и я решил ее следующим образом: сначала перейдите в файл app.py и скопируйте имя класса.

      from django.apps import AppConfig

class **ResumeConfig**(AppConfig):
name = 'resume'

теперь перейдите в setting.py и поместите его в определение приложения следующим образом:

      INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
**'resume.apps.ResumeConfig'**
]

сохранить и запустить команды в терминале

      python manage.py makemigrations
python manage.py migrate

запустите свой сервер и перейдите в / admin, ваша проблема будет решена

У меня возникла та же проблема: после перезапуска моя модель сервера разработки отображается на странице администратора.

Я также хотел бы добавить, что я сделал все, что сказали эти ответы, за исключением того, что я не вводил в командной строке sudo service apache2 restart что мне нужно было, чтобы изменения вступили в силу. (Потому что я тестировал на работающем сервере через порт 80 в веб-сервисах Amazon. Я также использовал операционную систему Ubuntu.) Это решило это для меня. Я надеюсь, что это может кому-то помочь.

Измените свой код администратора на этот:

from django.contrib import admin
from .models import Game

class GameAdmin(admin.ModelAdmin):
  list_display    = ['type', 'teamone', 'teamtwo', 'gametime']

admin.site.register(Game, GameAdmin)

Также убедитесь, что приложение включено в файл settings.py, и убедитесь, что вы импортируете правильное имя для своей модели. Другая причина, которая может вызвать эту проблему, - поставить запятую (,) в конце полей вашей модели, как если бы это список Python.

Моя новая модель не отображается на странице администратора из-за того, что я использую ADMIN_REORDER(https://pypi.org/project/django-modeladmin-reorder/) в settings.py для управления порядком моделей, добавлен некоторое время назад и забыт. Добавил новую модель в settings.py, и она появилась.

Дайте своему пользователю «статус суперпользователя» через функцию редактирования пользователя в панели администратора.

Скорее всего, пользователь, под которым вы вошли , не является суперпользователем и не имеет необходимых разрешений для вновь созданных моделей.

В Django после создания и переноса новых моделей разрешения существующих пользователей не обновляются. Только пользователи со статусом Суперпользователя по умолчанию могут просматривать, добавлять, изменять и удалять записи для этих моделей.

Чтобы устранить проблему и избежать ее в будущем, дайте «Статус суперпользователя» вашему пользователю разработки.

Я обновлял удаленный сервер кодом из локального, но удаленный сервер все еще использовал старые модели на экране администратора. Все выглядело точно так же на моем локальном и удаленном сервере - таблицы базы данных совпадали, и код также был идентичным.

Проблема заключалась в том, что удаленный сервер работал в среде venv. После запуска source venv/bin/activate а затем, выполнив миграции, админ показал все новые модели.

Также следует отметить, что вы должны убедиться, что вы вошли в систему с помощью суперпользователя.

Возможно, вы вошли в систему с пользователем, у которого есть ограниченные права на просмотр, так что попробуйте это.

Я в Django 2.0 все еще регистрирую свое приложение, используя только имя приложения, то есть "игра". Но проблема заключалась в разрешениях авторизованного пользователя.

Если вам нужно зарегистрировать несколько моделей, используйте.

admin.site.register((Model1 , Model2 , Model3))

или же

admin.site.register([Model1 , Model2 , Model3])

в вашем файле admin.py.

У меня была похожая проблема на экземпляре django, смонтированном в док-контейнере. Код был верным, но изменения в admin.py не появлялись в админке django.

После выхода из процесса django и перемонтирования контейнера с docker-compose upДобавленные модели стали доступны в админке django.

Ошибка может быть в views.pyв вашем "def" вы должны проверить, если вы получили

If mymodel.is_valid():
mymodel = model.save()

Я дам вам кусок моего кода, чтобы вы поняли это

@login_required(login_url='/home/')
def ask_question(request):
user_asking = UserAsking()

if request.method == "POST":
    user_asking = UserAsking(request.POST)

    if user_asking.is_valid():
        user_asking.save()

    return redirect(home)

return render(request, 'app/ask_question.html', {
    'user_asking': user_asking,
})

`UserAsking - это форма. я надеюсь я тебе помог

У меня были все классы администратора в папке ./sites/который работал только из-за определенных у меня зависимостей. Починил, а все остальное перестало работать.

Когда я переименовал этот каталог из ./sites/ к ./admin/ это сработало.

У меня такая же ошибка, но я не упомянул свое приложение в INSALLED_APPS

      INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'myapp.apps.myappConfig',
)

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

Одна из возможных причин заключается в том, что вы не закрываете старые процессы Python.

У меня была такая же проблема, django=4.0с docker-composeя не использовал ModelAdmin, получается регистрация нескольких моделей за один вызов admin.site.registerошибки при выполнении миграции.

Так делаю

      admin.site.register(ModelA, ModelB)

не сработало. вместо этого я сделал что-то вроде

      admin.site.register(ModelA)
admin.site.register(ModelB)

Я надеюсь, что это поможет всем, кто занимается докеризацией своего приложения Django.

В дополнение к тому, что сказал Сафф, ваш settings.py должно быть так:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'YOUR_PROJECT',
    # And
    'YOUR_PROJECT.Foo',
    'YOUR_PROJECT.Bar',
)

Для меня миграция была проблемой. Если вы создали это новое приложение, попробуйте сделать следующее:

      python manage.py makemigrations <name_of_your_app>
python manage.py migrate <name_of_your_app>

Вам не нужно включать все admin.site.registerв одном приложении, вы можете указать их в соответствующем приложении в admin.pyфайл.

Другие вопросы по тегам