Django - Was sind Models?


Django Logo

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 Zeichen
  • done: Ein Feld in dem entweder True für erledigt oder False fü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.

Alle Artikel dieser Serie über Django

Informationen und Links

Mach' mit, indem du kommentierst, verfolgst was andere zu sagen haben oder von deinem Blog aus verlinkst.


Weitere Artikel
Einfacher Syntax-Highlighting Templatefilter für Django
Ubuntu 8.10 (Intrepid Ibex) Alpha 1 erschienen

Einen Kommentar schreiben

Nimm dir einen Moment Zeit und sage uns, was du denkst. Du darfst ein bisschen HTML zur Formatierung verwenden.

Kommentare

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

Danke für den Hinweis. Kannte ich noch nicht, ich habe aber auch nichts gegen ipython und hab einfach darauf hingewiesen, damit niemand sich über den “komischen” Prompt wundert.

Warum sollte ich das normale Python pormpt nehmen, wenn ich iPython habe?

Btw: ipython gibt es auch standalone: z.B. http://ipython.scipy.org/