Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен? |
Создание аналога Twitter
Собрать все вместе – создание страниц пользователя
Итак, мы осветили кучу материала, такую как введение в концепции представлений и шаблонов. В заключительном разделе мы напишем еще одно представление и сможем использовать информацию, которую мы узнали. Это представление отобразит список всех твитов, принадлежащих пользователю.
Знакомство с моделями Django
Модели – это обычные классы Python с некоторыми дополнительными возможностями. Они являются подклассами django.db.models.Model. За кадром, объектно-реляционное отображение (ORM), связана с этими классами и объектами. Это связывает ее с подлежащей базой данных. ORM одна из важных возможностей Django, без которой мы не смогли бы закончить наши собственные запросы (SQL или MySQL) для доступа к содержимому базы данных. Каждый атрибут модели представляется полем базы данных. Без этих полей, модель будет подобна пустому контейеру, без них она ничего не значит.
Ниже приведено объяснение атрибутов модели Django c отступлением по их использованию. Полный список полей может быть найден на страницах документации: https://docs.djangoproject.com/en/dev/ref/models/fields
Ниже приведен перечень часто используемых типов полей:
Тип поля | Описание |
---|---|
IntegerField | Целое число. |
TextField | Поле для большого текста |
DateTimeField | Поле дата-время |
EmailField | Поле для электронной почты, максимум 75 символов |
URLField | Поле для URL-адреса, максимум 200 символов |
FileField | Поле загружаемого файла |
Каждое поле модели принимает набор аргументов конкретного поля. Например если мы хотим,, чтобы поле было типа CharField, мы должны предъявить параметр max_length в качестве его аргумента, который сопоставляется с размером поля в переменной varchar в базе данных.
Ниже приведены аргументы, которые могут быть применены ко всем типам полей (они необязательны):
- null: по умолчанию он имеет значение false. Когда установлен в true, в связанном поле в базе данных возможно хранить значение null
- blank: по умолчанию он имеет значение false. Если задано значение true, связанное поле разрешено иметь значение пустое, хранящихся в базе данных.
Разница между параметрами blank и null связана с тем, что параметр null в основном связан с базой данных, тогда как параметр blank используется для проверки поля. Другими словами, если атрибут установлен в false, пустое значение (blank) для атрибута не будет сохраняться.
- choices: здесь может быть список или кортеж и он может быть перечисляемым. Если наличествует форма кортежа, первый элемент является значением, которое будет храниться в базе данных,а второе значение используется для отображения в виджетоподобной форме или в ModelChoiceField.
Например:
USER_ROLE = ( ('U',’ПОЛЬЗОВАТЕЛЬ’), ('S ',' СОТРУДНИКИ '), ('A', 'АДМИНИСТРАТОР') ) user_role = models.CharField(max_length=l, choice s=USER_ROLE)
- default: значения, назначенные атрибуту, каждый раз, когда создается экземпляр объекта класса.
- help_text: текстовая помощь, отображаемая в виде виджета.
- primary_key: Если установлено в True, это поле создает первичный ключ для модели. Если первичный ключ в модели отсутствует, Django создаст целочисленное поле и пометит его как первичный ключ.
Отношения в моделях
Есть три основных типа отношений: многие-ко-многим, многие-к-одному и один-к-одному.
Отношения многие-к-одному
В Django, параметр django.db.models.ForeignKey используется для определения модели как внешнего ключа к атрибуту другой модели, чьи результаты связаны отношениями многие-ко многим.
Этот атрибут используется, как и любой другой в классе модели, после включения класса, в котором он присутствует. Например если учащиеся учаться в конкретной школе, между ними связь такова, что в школе многоо учащихся, каждый учещийся учится только в одной школе, создавая отношения многие-к-одному. Рассмотрим следующий фрагмент кода:
from django.db import models class School(models.Model): #... ass class Student(models.Model): school = models.ForeignKey(School) # ...
Отношения один-к-одному
Отношения один-к-одному очень похожи на отношения многие к одному. Единственное отличие состоит в том, что обратное отображение результатов в одном объекте в случае отношений один к одному противоположно отношениям многие к одному. Например:
class EntryDetail(models.Model): entry = models.OneToOneField(Entry) details = models.TextField()
В приведенном примере класс EntryDetail() имеет атрибут с именем entry который сопоставлен с моделью Entry отношением один-к-одному. Это означает, что каждый объект модели Entry отображается в модель EntryDetail.
Отношения многие-ко-многим
Как можно предположить по названию, атрибуты модели с отношениями многие-ко-многим обеспечивают доступ к обеим моделям, к которым они прикреплены (как обратная связь один-ко-многим). Именование атрибутов означает только разницу между двумя отношениями.
Чтобы все было ясно, рассмотрим следующий пример:
class Product(models.Model): name = models.CharField(_(u"Name"), max_length=50) class Category(models.Model): name = models.CharField(_(u"Name"), max_length=50) products = models.ManyToManyField("Product", blank=True, null=True)
С идеей атрибута и первичных отношений мы можем сразу создать модель длянашего проекта, чем мы скоро и займемся в следующих разделах.
Если мы соберемся проектировать модель для приложения, мы должны разбить приложения, если в них слишком много моделей. Если у нас есть более чем примерно 15 моделей в приложении, мы должны думать о том, как разбить наше приложение на небольшие приложения. Это связано с тем, что если у нас существует приложение с 15-ю моделями, мы вероятно все усложнили. Это не подходит к философии Django о том, что приложение должно выполнять одну задачу и выполнять ее правильно.