Python manage py syncdb

Начинаем работу с Django — подключение админки

На предыдущем шаге нами заданы структуры данных для хранения списка вопросов и вариантов ответов для них.

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

Включение админки Django

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

Во-первых, в файле настроек проекта settings.py нужно раскоментировать строку django.contrib.admin

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

Django создаст в базе данных таблицы, которые необходимы для работы админской части сайта.

Creating tables . Creating table django_admin_log Installing custom SQL . Installing indexes . Installed 0 object(s) from 0 fixture(s)

Теперь нужно отредактировать файл mysite/urls.py, чтобы сообщить Dajngo, какой код нужно вызвать, когда мы обратимся через браузер к админке.

Читайте также:  Javascript проверка поля input

Для этого раскоментируем нужные строки. Теперь файл mysite/urls.py должен выглядеть так:

from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', '>.views.home', name='home'), # url(r'^>/', include('>.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), )

Строки, которые нужно раскоментировать, подсвечены жирным шрифтом.

Для запуска нашего сайта выполним команду

python manage.py runserver

В консоли вы должны увидеть

Validating models. 0 errors found June 10, 2013 - 15:23:00 Django version 1.5.1, using settings 'mysite.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

Это означает, что все в порядке, и мы можем начинать работу с сайтом. Но вместо http://127.0.0.1:8000/ откроем http://127.0.0.1:8000/admin/

Log in | Django site admin

Вы должны увидеть приглашение ввести логин и пароль для входа в админку Django

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

Создание суперпользователя админки Django

Если по какой-то причине вы не создали суперпользователя раньше, то вы можете это сделать, выполнив консоли команду

python manage.py createsuperuser

Зайдя в админку, вы должны увидеть подобную картину:

Django site admin

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

Отображение объектов в админке Django — подключаем наши модели

Чтобы получить доступ к изменению объектов через админ. часть сайта, нужно зарегистрировать их в приложении admin.

Создайте новый файл в каталоге polls с названием admin.py. В файл вставьте следующий текст:

from django.contrib import admin from polls.models import Poll admin.site.register(Poll)

Теперь перезапустите сервер и обновите или зайдите заново в админку.

Django Site administration - добавляем наши модели

Порядок! Теперь нам доступно создание и редактирование новых вопросов через пункт Polls.

Django site admin - добавляем новый объект

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

Django site admin - проверка введенных данных

После заполнения всех полей и сохранения объекта, информация о нем сохраняется в базе данных.

Новый объект появился в списке, однако выглядит не очень информативно:

Django site admin - список объектов

Дело в том, что для вывода информации об объекте Django использует метод __unicode__(). В созданном нами классе Poll нет такого метода. Добавим его.

Добавление названия объектам

Для вывода информативного названия объекта, добавим метод __unicode__() к классам Poll и Choice.

Отредактируем models.py, добавив выделенный жирным текст:

class Poll(models.Model): # . def __unicode__(self): return self.question class Choice(models.Model): # . def __unicode__(self): return self.choice_text

Теперь после обновления списка объектов Poll в админке используется текст, который мы ввели в качестве вопроса:

Django site admin - список объектов

Добавление связанных объектов

Чтобы можно было добавить новые варианты ответов через админку, достаточно в файле admin.py добавить:

from polls.models import Choice admin.site.register(Choice)

Теперь “Choices” появилась в Django admin. При добавлении нового варианта ответа нужно будет выбрать соответствующий вопрос:

Choice admin page

Однако это не очень удобно. В списке выбора вопроса будут все вопросы, которые были сохранены в базе. Кроме того, логично вводить варианты ответов при добавлении вопроса.

В файле admin.py уберем register() для класса Choice и отредактируем регистрацию класса Poll. Измените текст на приведенный ниже.

from django.contrib import admin from polls.models import Poll, Choice class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class PollAdmin(admin.ModelAdmin): inlines = [ChoiceInline] admin.site.register(Poll, PollAdmin)

Теперь объекты Choice могут быть добавлены сразу при добавлении вопроса, при этом Django предложит заполнить сразу 3 варианта, а при необходимости добавить новые.

Additional slot added dynamically

Единственный момент — класс admin.StackedInline выводит все поля друг под другом и этом занимает много места. В Django admin есть более подходящий класс TabularInline для табличного вывода полей.

class ChoiceInline(admin.TabularInline): #.

Дополнительную информацию по изменеию админки Django можно найти в статье http://itman.in/django-admin-changes/

А нам пора позаботиться о том, что будут отображать основные страницы нашего сайта. Переходим дальше.

Начинаем работу с Django — подключение админки: 9 комментариев

Здравствуйте. После попытки добавить новый «poll» в админке — получаю ошибку:
«»»
no such table: polls_poll Request Method: POST
Request URL: http://127.0.0.1:8000/admin/polls/poll/add/
Django Version: 1.8.4
Exception Type: OperationalError
Exception Value:
no such table: polls_poll
«»»
К какому из этапов урока мне нужно вернуться?

Виталий, если вы описали модели в models.py, то возможно ві забыли добавить ваше приложение (в случае описанных уроков оно называется polls) в INSTALLED_APPS. Посмотрите внимательно вывод выполнения команды
python manage.py syncdb
в http://itman.in/django-howto/#_Django-4 Если дело в этом — просто добавьте приложение в список и выполните
python manage.py syncdb повторно.

Чтобы лучше разобраться с работой Django с базами данных и как можно менять таблицы базы после ее создания — рекомендую прочесь http://itman.in/django-db-migration/. Но это потом, на первом этапе лучше просто удалить базу и создать заново, пока все не будет получаться 🙂

Была такая же проблема. Оказалось, что начиная с какой-то версии (1.7 или 1.8) команда syncdb удалена, вместо нее необходимо использовать:
python manage.py makemigrations
python manage.py migrate

Возникла та же проблема, что и у Виталия OperationalError at /admin/polls/poll/add/
no such table: polls_poll Не знаю в чём проблема, везде всё прописано и синхронизировано

Попробуй:
python manage.py makemigrations
python manage.py migrate
python manage.py syncdb Потом restart server

Отредактировал файл urls.py как в статье.
После выполнения команды python manage.py runserver в консоли ошибка:
NameError: name ‘patterns’ is not defined

Источник

Русские Блоги

Использование команды python manage.py в фреймворке Django

Использование syncdb в manage.py

Роль inspectdb: обратная генерация существующих таблиц базы данных. Модели

Роль syncdb: генерировать таблицы базы данных в соответствии с моделью

python manage.py SyncDB. Эта команда исправит проблему сопоставления SQL, синхронизирует базу данных и создаст дополнительные таблицы базы данных для интерфейса управления.

Django сообщает об ошибках при создании таблиц базы данных на основе моделей

MySQLdb in Python: “Can’t connect to MySQL server on ‘localhost’”
Конфигурация базы данных в настройках:

в это времяЗамените localhost в HOST на 127.0.0.1Вот и все. После изменения:

# coding=utf-8 from django.db import models import django.utils.timezone as timezone class BorrowRecord(models.Model): book_name = models.CharField ('Имя книги', max_length = 200, null = False) staff_name = models.CharField ('Заемщик книги', max_length = 20, null = False) borrow_time = models.DateTimeField(default=timezone.now) renew_time = models.DateTimeField(null=True) return_time = models.DateTimeField(null=True) substitute = models.CharField ('Ежедневный доход', max_length = 20, null = True) remarks = models.CharField ('Remarks', max_length = 500, null = True) def __str__(self): return self.name 
# coding=utf8 from django.contrib import admin from book import models as bookModels admin.site.register(bookModels.BorrowRecord) 

В каталоге проекта pythonmanage.py syncdb генерирует таблицы базы данных на основе моделей

Использование createuperuser в manage.py

D:\PycharmProjects\NewBook> D:\PycharmProjects\NewBook>python manage.py createsuperuser Username: bookAdmin Email address: [email protected] Password: Password (again): Superuser created successfully. 

Источник

Оцените статью