Предыдущая часть.
После того как вы создали модели, вы можете использовать высокоуровневый API, который предоставляет Django для работы с ними.
Выполните команду python manage.py shell
и введите следующее:
In [1]: from books.models import Publisher In [2]: Do you really want to exit ([y]/n)? y 19:12:46 [setevoy@venti /var/www/django/example] $ python manage.py shell In [1]: from books.models import Publisher In [2]: p1 = Publisher(name='Apress', address='2855 Telegraph Avenue', ...: city='Berkeley', state_province='CA', country='U.S.A.', ...: website='http://www.apress.com/') In [3]: p1.save() In [4]: p2 = Publisher(name="O'Reilly", address='10 Fawcett St.', ...: city='Cambridge', state_province='MA', country='U.S.A.', ...: website='http://www.oreilly.com/') In [5]: p2.save() In [6]: publisher_list = Publisher.objects.all() In [7]: print(publisher_list) [<Publisher: Publisher object>, <Publisher: Publisher object>]
Рассмотрим, что выполняет этот код:
- Мы импортируем класс модели
Publisher
, что даёт нам возможность работать с базой данных, которая содержит издателей. - Мы создаём объект
Publisher
, указывая значения для каждого поля –name
,address
и так далее. - Что бы сохранить объект в базу – мы используем вызов
save()
. Django выполняет соответствующий SQL вызовINSERT
. - Что бы получить список издателей из базы – используется атрибут
Publisher.objects
. Для получения всего списка издателей – мы используем вызовPublisher.objects.all()
. Django выполняет соответствующий SQL вызовSELECT
.
Один момент, который стоит уточнить, если вы не обратили на него внимание в примере выше. Когда вы создаёте объект, используя Django API, Django но не сохраняет объект в базу данных, пока вы не вызовете метод save()
:
p1 = Publisher(...) # p1 ещё не сохранён в базе p1.save() # а теперь - сохранён
Если вы хотите создать объект и сохранить его в базу одним запросом – используйте метод objects.create()
. Следующий пример эквивалентен предыдущему примеру:
>>> p1 = Publisher.objects.create(name='Apress', ... address='2855 Telegraph Avenue', ... city='Berkeley', state_province='CA', country='U.S.A.', ... website='http://www.apress.com/') >>> p2 = Publisher.objects.create(name="O'Reilly", ... address='10 Fawcett St.', city='Cambridge', ... state_province='MA', country='U.S.A.', ... website='http://www.oreilly.com/') >>> publisher_list = Publisher.objects.all() >>> publisher_list
На самом деле – вы можете делать очень многое с помощью Django API, но для начала – давайте разберёмся с некоторыми небольшими сложностями.
Продолжение – Django Book: отображение строк моделей.