A talk by Travis Swicegood / @tswicegood / #djintro
Link at the end, so hold your horses
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': './project.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
# ... and so on
'your_app',
'third_party_app',
]
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=250)
language = models.CharField(max_length=2)
$ python manage.py shell
Python 2.7.3 (default, Apr 20 2012, 18:35:54)
[GCC 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.58)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from people.models import Person
>>> t = Person.objects.create(name='Travis Swicegood', language='en')
>>> t.name
'Travis Swicegood'
>>> t
<Person: Person object>
>>>
class Person(models.Model):
name = models.CharField(max_length=250)
language = models.CharField(max_length=2)
def __unicode__(self):
return self.name
>>> from people.models import Person
>>> t = Person.objects.get(name='Travis Swicegood')
>>> t
<Person: Travis Swicegood>
>>>
>>> Person.objects.filter(name='Travis Swicegood')
[<Person: Travis Swicegood>]
class Person(models.Model):
name = models.CharField(max_length=250)
language = models.CharField(max_length=2)
def __unicode__(self):
return self.name
class Language(models.Model):
name = models.CharField(max_length=250)
code = models.CharField(max_length=2)
def __unicode__(self):
return u'%s (%s)' % (self.name, self.code)
class Person(models.Model):
name = models.CharField(max_length=250)
language = models.ForeignKey(Language, related_name='people')
def __unicode__(self):
return self.name
>>> from people.models import *
>>> en = Language.objects.create(name='English', code='en')
>>> en
<Language: English (en)>
>>> t = Person.objects.create(name='Travis Swicegood', language=en)
>>> t
<Person: Travis Swicegood>
>>> t.language
<Language: English (en)>
>>>
>>> en.people.all()
[<Person: Travis Swicegood>]
>>> en.people.get(name='Travis Swicegood') == t
True
INSTALLED_APPS
# Uncomment the next line to enable the admin:
'django.contrib.admin',
urls.py
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
# ... further down the file
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
people.admin
from django.contrib import admin
from . import models
admin.site.register(models.Language)
admin.site.register(models.Person)
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
url('person/', include('people.urls')),
)
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^$', views.PeopleListView.as_view(), name="people_list"),
url(r'^(?P[0-9]+)/$', views.PersonView.as_view(), name="person"),
)
from django.views.generic import DetailView, ListView
from . import models
class PeopleListView(ListView):
model = models.Person
class PersonView(DetailView):
model = models.Person
{{ app_name }}/{{ model_name }}_detail.html
{{ app_name }}/{{ model_name }}_list.html
people/person_detail.html
people/person_list.html
person_detail.html
<dl>
<dt>Name</dt>
<dd>{{ object.name }}</dd>
<dt>Language</dt>
<dd>{{ object.language }}</dd>
</dl>
person_list.html
<ul>
{% for person in object_list %}
<li><a href="{% url "person" pk=person.pk %}">{{ person }}</a></li>
{% endfor %}
</ul>