Django 6(モデル)
1. models.py
2.モデルの取り付け
$ vim settings.py
INSTALLED_を修正APPS:
MIDDLEWARE_を修正CLASSSES:
INSTALLED_APPSはDjangoプロジェクトにどのappがアクティブになっているかを教えます.
3.データベースの作成:
$ python manage.py validate#検証モデルの有効性
$ python manage.py sqlall books#CREATE TABLE文の生成
ここのbooksはappの名前で、manageを実行します.py startappのように
$ python manage.py syncdb#同期モデルからデータベースへ
4.基本データアクセス:
モデルが作成されると、Djangoはこれらのモデルに高度なPython APIを自動的に提供します.
$ python manage.py shell
上記のコードは次のとおりです.
更新(update):
データフィルタ
データフィルタリング(包括的検索)
その他の検索タイプは、icontains(大文字と小文字に関係のないLIKE)、startswith、
endswith、そしてrange(SQL BETWEENクエリー)
個々のオブジェクトを取得するには、次の手順に従います.
データのソート:
コードを変更して、デフォルトのソートを指定します.
チェーンクエリ:
返されるデータの制限:(1つのみ取り出し)
DjangoはPythonの負のインデックスをサポートしていませんが、以下の代わりに使用できます.
複数のオブジェクトを更新:
上のsave()メソッドはname列の値だけでなく、すべての列を更新します.
指定した列を変更し、結果セット(QuerySet)オブジェクトのupdate()メソッドを呼び出すことができます.
同時に、複数のレコードを更新します.
オブジェクトを削除するには
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=50)
website = models.URLField()
def __unicode__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
def __unicode__(self):
return u'%s%s'% (self.first_name, self.last_name)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title
2.モデルの取り付け
$ vim settings.py
INSTALLED_を修正APPS:
INSTALLED_APPS = (
'mysite.books',
)
MIDDLEWARE_を修正CLASSSES:
MIDDLEWARE_CLASSES = (
)
INSTALLED_APPSはDjangoプロジェクトにどのappがアクティブになっているかを教えます.
3.データベースの作成:
$ python manage.py validate#検証モデルの有効性
$ python manage.py sqlall books#CREATE TABLE文の生成
ここのbooksはappの名前で、manageを実行します.py startappのように
$ python manage.py syncdb#同期モデルからデータベースへ
4.基本データアクセス:
モデルが作成されると、Djangoはこれらのモデルに高度なPython APIを自動的に提供します.
$ python manage.py shell
>>> from books.models import Publisher
>>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA',
... website='http://www.apress.com/')
>>> p1.save() #
>>> p2 = Publisher(name='Thk', address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA',
... website='http://www.apress.com/')
>>> p2.save()
>>> publisher_list=Publisher.objects.all()
>>> publisher_list
上記のコードは次のとおりです.
>>> from books.models import Publisher
>>> p1 = Publisher.objects.create(name='Apress',
... address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA',
... website='http://www.apress.com/')
>>> p2 = Publisher.objects.create(name='Thk',
... address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA',
... website='http://www.apress.com/')
>>> publisher_list=Publisher.objects.all()
>>> publisher_list
更新(update):
>>> p2.name='Thinking'
>>> p2.save()
>>> p2
データフィルタ
>>> Publisher.objects.filter(name='Thinking')
データフィルタリング(包括的検索)
>>> Publisher.objects.filter(name__contains='Thin')
その他の検索タイプは、icontains(大文字と小文字に関係のないLIKE)、startswith、
endswith、そしてrange(SQL BETWEENクエリー)
個々のオブジェクトを取得するには、次の手順に従います.
>>> Publisher.objects.get(name="Apress")
データのソート:
>>> Publisher.objects.order_by('name')
コードを変更して、デフォルトのソートを指定します.
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=50)
website = models.URLField()
def __unicode__(self):
return self.name
class Meta:
ordering = ['name']
チェーンクエリ:
>>> Publisher.objects.filter(city='Berkeley').order_by("-name")
返されるデータの制限:(1つのみ取り出し)
>>> Publisher.objects.order_by('name')[0]
or
>>> Publisher.objects.order_by('name')[0:1]
DjangoはPythonの負のインデックスをサポートしていませんが、以下の代わりに使用できます.
>>> Publisher.objects.order_by('-name')[0]
複数のオブジェクトを更新:
>>> p = Publisher.objects.get(name='Apress')
>>> p.name = 'Apress Publishing'
>>> p.save()
上のsave()メソッドはname列の値だけでなく、すべての列を更新します.
指定した列を変更し、結果セット(QuerySet)オブジェクトのupdate()メソッドを呼び出すことができます.
>>> Publisher.objects.filter(id=1).update(name='Apress')
同時に、複数のレコードを更新します.
>>> Publisher.objects.all().update(address='Hotel')
オブジェクトを削除するには
>>> p2 = Publisher.objects.get(name='Thinking')
>>> p2.delete()
>>> Publisher.objects.filter(address='Hotel').delete()
>>> Publisher.objects.all().delete()