Sunday, September 26, 2010

Learning Django: Create Model and Django App

ในขั้นแรก เราจะสร้าง app ใหม่ใน project ขึ้นมาก่อน เนื่องจากใน Django ถ้าจะสร้าง models (database layers ของ Django) จะต้องสร้าง Django app ขึ้นมา เพราะ models จะต้องอยู่ใน app

Create Django App

เราสามารถสร้าง Django App โดยใช้คึำสั่ง

python manage.py startapp app_name


ในตัวอย่างเราจะสร้าง app ที่ชื่อ books => python manage.py startapp books

Django จะสร้าง folder app_name พร้อมไฟล์อีก 4 ไฟล์
1. __init__.py
2. models.py
3. tests.py
4. views.py

Create Model

การสร้าง model นั้นเราสามารถสร้างโดยการแก้ไข models.py ใน app folder ลองดูตัวอย่างของ model


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=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()


เป็นการสร้าง model ขึ้นมา 3 ตัว (เหมือนกับการกำหนด table ใน database ต่างกันตรงที่ใช้ไวยกรณ์ของ python)


Installing Model

หลังจากที่เราสร้าง Model (3 ตัว) เราจะทำการติดตั้ง model นี้ เนื่องจาก model ต้องอยุ่ใน app (book) เราจะทำการติดตั้ง books ไปใน project เรา โดยการแก้ไขตัวแปร INSTALLED_APPS ในไฟล์ settings.py


INSTALLED_APPS = (
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.sites',
     'mysite.books',
)

หลังจากนั้นให้สร้าง table ตาม model นี้ใน database ตัว Django เอง มี utility ช่วยโดยใช้คำสั่ง syncdb

python manage.py syncdb

คำสั่งนี้จะช่วย sync ตัว model ที่เรามีอยู่ใหัตรงกับ database

ต่อไปเราจะมารู้จักกับวิธี access data กัน

No comments:

Post a Comment