обітників фірми. Тільки після того як адміністратор зв'яжеться з зареєстрованим користувачем і переконається, що той є учасником, він активує його аккаунт через адміністративну частину, і користувач зможе повноцінно користуватися сайтом.
=models. BooleanField (u Є учасником спільноти raquo ;, blank=True, default=False)
Поле для фотографії користувача змінено в цій роботі на FileBrowserField. Цей клас надає нам можливість завантажувати відразу декілька файлів, вибирати якого розміру вони будуть і багато іншого (малюнок 3).
Малюнок 3 - Адміністративна частина моделі Profile
Інші поля описують дані користувача: ім'я, прізвище, по батькові та інші контактні дані.
Для того що б зберігати документи користувача, які він буде завантажувати для скачування іншим користувачам, створюємо додаткову модель FileProfile (малюнок 4).
Малюнок 4 - Адміністративна частина моделі FileProfile
Ця модель містить поле для документа file (FileBrowserField), в яке буде зберігатися файл при додаванні його користувачем. Для того що б поле завантажують конкретно документи необхідно встановити параметр format строковим аргументом document. Тоді поле зможе зберігати формати .pdf raquo ;, .doc raquo ;, .rtf raquo ;, .txt raquo ;, .xls raquo ;, .csv raquo ;.
file=FileBrowseField (u «Файл», directory= uploads/files/ raquo ;, max_length=100, format= document raquo ;, null=True, blank=True)
Поле user (ForeignKey), яке буде автоматично, при збереженні об'єкта моделі, заповнюватися об'єктом моделі Profile поточного користувача.
user=models. ForeignKey (Profile, related_name= profile raquo ;, verbose_name=( User ), blank=True, null=True)
Так само додамо два додаткові поля title і date відповідно CharField і DateTimeField.
title=models. CharField (u «Тема», max_length=64, blank=True, null=True)=models. DateTimeField (verbose_name=u Дата завантаження файлу raquo ;, blank=True, null=True, default=datetime.datetime.now)
Після збереження файлу models.py в додатку profile, треба що б в базі даних згенерувати описані нами моделі. У попередній роботі я використовувала стандартну команду django - syncdb, яка може з нуля створити таблицю, але не виробляти з нею надалі жодних змін. Т. е. Якщо я зраджувала які-небудь поля мені доводилося видаляти всю таблицю, залежні таблиці, і всі їхні дані для того що б просто додати поля. Іноді вручну, в PostgreSQL створювала або редагувала поля, але при додавання поля-зв'язку (ManyToManyField, ForeignKey і т.д.) звичайно ж виникали труднощі. Для того що б уникнути всього цього встановлюємо і підключаємо модуль south, який здійснює редагування таблиць в базі даних за допомогою команд schemamigration і migrate. Якщо ми перший раз робимо міграцію, то необхідно виконувати команду schemamigration з ключем - initial:
gt; python manage.py schemamigration profile - initial
Після цієї команди в додатку створиться папка migrations, в якій сформується файл c расшіреніем.py, при запуску якого командою migrate, виконаються пітоновскіе скрипти і відбудуться зміни в нашій таблиці:
gt; python manage.py migrate profile
У подальшому при редагуванні полів в цьому додатку будемо використовувати ті ж команди, але вже з ключем - auto.
При створенні інших таблиць на основі моделей будемо також використовувати south.
Тепер перейдемо до додатка blog, яке містить моделі Blog, Tags і Comment, що описують відповідні таблиці в базі даних. Модель Blog (малюнок 6) посилається на модель Tags (малюнок 5) за допомогою поля tags, яке є екземпляром класу ManyToManyField. Це означає, що кожному об'єкту моделі Blog відповідатиме безліч об'єктів моделі Tags.
tags=models. ManyToManyField (Tags, verbose_name=u Теги raquo ;, blank=True)
Малюнок 5 - Адміністративна частина моделі Tags
Малюнок 6 - Адміністративна частина моделі Blog
Модель Comment (малюнок 7) буде посилатися на модель Blog за допомогою зв'язку ForeignKey.
Малюнок 7 - Адміністративна частина моделі Comment
Це необхідно для того що б визначати, які коментарі відносяться до конкретної новини. При створенні цих трьох моделей також нам необхідні поля:
: zagol, author - (обьект класу CharField) заголовок новини та ім'я автора, i...