Django - Was sind Models?

In den anderen Artikeln dieser Serie wurde schon mehrmals der Begriff “Models” erwähnt. Jetzt wird endlich erklärt, was das ist: Models sind bei Django und einigen anderen Webframeworks bestimmte Objekte, die eine Tabelle in der Datenbank darstellen und über die auch einfach auf diese Datenbank zugegriffen werden kann. In diesem Artikel werden Models an einer Todo-Liste demonstriert.
Als erstes erstellen wir eine neue App in userem Projekt:
python manage.py startapp todo
Zuerst sollte diese App auch in der settings.py eintragen werden. Dazu öffnet man diese Datei und sucht nach INSTALLED_APPS. Dort kann dann 'todo' hinzugefügt werden. Dies kann danach so aussehen:
1 2 3 4 5 6 7 | INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'todo' ) |
Außerdem müssen ganz oben in der settings.py die DATABASE_*-Einstellungen gesetzt werden, dass man überhaupt eine Datenbank hat. Zum Entwickeln empfiehlt sich SQLite.
Als nächstes kann man in der Datei todo/models.py anfangen, seine Models zu erstellen. Ein Model ist eine einfache Python-Klasse. Ein Model könnte zum Beispiel so aussehen:
1 2 3 4 5 | from django.db import models class Item(models.Model): title = models.CharField(max_length=50) done = models.BooleanField(default=False) |
Hier wird eine Klasse Item definiert, die von django.db.models.Model abgeleitet wird. Sie hat zwei Felder:
title: Ein Textfeld mit der maximalen Länge von 50 Zeichendone: Ein Feld in dem entwederTruefür erledigt oderFalsefür unerledigt steht.
Außerdem wird jedem Model noch ein Feld id hinzugefügt. Dieses enthält eine eindeutige ID für jeden Datensatz.
Jetzt muss nicht die Datenbank synchronisiert werden. Dabei wird man gefragt, ob man einen Superuser erstellen möchte. Das ist noch nicht nötig, kann aber nicht schaden. Der Befehl sieht so aus:
python manage.py syncdb
Anschließend kann man mit diesem Befehl eine interaktive Shell starten:
python manage.py shell
Hier kann man jetzt nach Lust und Lauene mit seinen Models spielen:
In [1]: from todo.models import Item In [2]: Item Out[2]: <class 'todo.models.Item'> In [3]: Item.objects.all() Out[3]: [] In [4]: Item(title='Programmieren').save() In [5]: Item.objects.all() Out[5]: [<Item: Item object>] In [6]: Item.objects.all()[0] Out[6]: <Item: Item object> In [7]: Item.objects.all()[0].title Out[7]: u'Programmieren' In [8]: Item.objects.all()[0].done Out[8]: False In [9]: Item(title='Essen', done=True).save() In [10]: Item.objects.all() Out[10]: [<Item: Item object>, <Item: Item object>] In [11]: i = Item.objects.all()[0] In [12]: i.done Out[12]: False In [13]: i.done = True In [14]: i.save() In [15]: Item.objects.all() Out[15]: [<Item: Item object>, <Item: Item object>] In [16]: i.delete() In [17]: Item.objects.all() Out[17]: [<Item: Item object>]
Hinweis: Der Promt könnte etwas anders aussehen (>>>), aber ich habe ipython installiert, welches genutzt wird, wenn es vorhanden ist.



Die iPython Shell kann man auch mittels “manage.py shell –plain” umgehen und gelangt zur normalen Python Shell.