Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ Python ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

SQL\T-SQL

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Django: простой проект часть 4


Продолжаем серию статей по Django и Python.

В этом уроке мы поработаем с админкой.


Минимальные действия для запуска админки

в C:\django_code\first\first\settings.py
в разделе INSTALLED_APPS раскометнтировать 'django.contrib.admin',

 

Когда Django загружает URLconf от urls.py при запуске сервера, он выполняет admin.autodiscover (), 
эта функция перебирает установки INSTALLED_APPS и ищет файл с именем admin.py на каждом из установленных приложений. 
Если admin.py существует в данном приложении, он выполняет код в этом файле.

C:\django_code\first\first\urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^firstapp/', include( 'firstapp.urls' ) ),
    url(r'^admin/', include(admin.site.urls)),
)

 

теперь зарегистрируем наши модели

C:\django_code\first\firstapp\admin.py

from django.contrib import admin

from firstapp.models import dept, workers

admin.site.register(dept)
admin.site.register(workers)

 


Теперь добавим удобства

C:\django_code\first\firstapp\admin.py

1 добавим заголовок админки


from django.contrib import admin

from firstapp.models import dept, workers

#Заголовок админки
admin.AdminSite.site_header = 'Заголовок админки'

admin.site.register(dept)
admin.site.register(workers)  

 

2 после добавления записей, мы видим неудобнуое отображение в списке добавленных записей,

выведем их в "человеческом виде"

C:\django_code\first\firstapp\models.py
from django.db import models

class dept ( models.Model ):
    def __str__(self):
        return self.name
    name       = models.CharField(max_length=15)
    

class workers ( models.Model ):
    def __str__(self):
        return self.name
    dept       = models.ForeignKey(dept)
    name       = models.TextField()
    birthday   = models.DateTimeField()
    boss       = models.CharField(max_length=12)
    
    
    
3 изменение порядка полей и скрытие

C:\django_code\first\firstapp\admin.py

from django.contrib import admin

from firstapp.models import dept, workers

#Заголовок админки
admin.AdminSite.site_header = 'Заголовок админки'


class WorkersAdmin(admin.ModelAdmin):
    #fieldsets - название группы полей.
    #В fields передаем поля из модели.
    #Во второй строке класс "collapse", отображает группу полей изначально скрытой.
    fieldsets = [
        (None,               {'fields': ['dept']}),
        ('Информация о работнике', {'fields': ['name', 'birthday', 'boss'], 'classes': ['collapse']}),
    ]


admin.site.register(dept)
#WorkersAdmin передается как настройка для класса workers
admin.site.register(workers, WorkersAdmin)  

 

4 Отображение доп.полей в отображении списка работников

C:\django_code\first\firstapp\admin.py


from django.contrib import admin

from firstapp.models import dept, workers

#Заголовок админки
admin.AdminSite.site_header = 'Заголовок админки'


class WorkersAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['dept']}),
        ('Информация о работнике', {'fields': ['name', 'birthday', 'boss'], 'classes': ['collapse']}),
    ]
    #Отображение доп.полей в отображении списка работников
    #http://127.0.0.1:8000/admin/firstapp/workers/
    list_display = ('name', 'dept', 'birthday')


admin.site.register(dept)
admin.site.register(workers, WorkersAdmin)  

 


5 Добавим поле поиска(поиск по указанному полю):

C:\django_code\first\firstapp\admin.py

from django.contrib import admin

from firstapp.models import dept, workers

#Заголовок админки
admin.AdminSite.site_header = 'Заголовок админки'


class WorkersAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['dept']}),
        ('Информация о работнике', {'fields': ['name', 'birthday', 'boss'], 'classes': ['collapse']}),
    ]
    list_display = ('name', 'dept', 'birthday')
    #Добавим поле поиска(будет искать по указанному полю):
    search_fields = ['name']


admin.site.register(dept)
admin.site.register(workers, WorkersAdmin)  

 

6 Добавления связанных объектов 
добавим возможность добавлять сотрудников из формы добавления департамента

C:\django_code\first\firstapp\admin.py

from django.contrib import admin
from firstapp.models import dept, workers

admin.AdminSite.site_header = 'Заголовок админки'

#Добавления связанных объектов (отобразим функционал добавления workers в dept)
#Варианты отображения TabularInline и StackedInline
class WorkersInline(admin.TabularInline):
#class ChoiceInline(admin.StackedInline):
    model = workers
    #Показать 3 формы для добавления работников в департамент.
    extra = 3

class DeptAdmin(admin.ModelAdmin):
    #функционал добавления workers в dept
    inlines = [WorkersInline]

class WorkersAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['dept']}),
        ('Информация о работнике', {'fields': ['name', 'birthday', 'boss'], 'classes': ['collapse']}),
    ]
    list_display = ('name', 'dept', 'birthday')
    search_fields = ['name']


admin.site.register(dept, DeptAdmin)
admin.site.register(workers, WorkersAdmin)  

 

На этом все, видео выложу на моем канале YouTube!


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект