读书人

Django学习札记3

发布时间: 2012-12-28 10:29:04 作者: rapoo

Django学习笔记3

上一个笔记写了怎么样把管理员模块给添加到网站管理里面,现在来说一下怎么样去建立一个自己的模块

在pydev中,选中项目。右键->Django->custom common, 在这里可以输入命令 等同于执行manager.py ...

输入startapp orders. 这样pydev就会自动在项目的源文件下面建一个包orders.下面会自动生成models.py,test.py,views.py

models.py 是和数据库映射的类,Django 的映射关系类似hibernate

test.py 单元测试用

views.py 接受视图请求和跳转 类似mvc模式中的c ?注意 不是v.

在orders下面的models下面,添加2个类

from django.db import models# Create your models here.class Order(models.Model):    order_creater = models.CharField(max_length=20)    order_date = models.DateTimeField('order date')    class OrderDetail(models.Model):    order = models.ForeignKey(Order)    detail_lineNO = models.IntegerField()    order_SKU = models.CharField(max_length=50)
?

这2个类都会被映射到数据库。要查看sql语句。manager,py sql orders.

可以看到这样的脚本

BEGIN;CREATE TABLE "orders_order" (    "id" integer NOT NULL PRIMARY KEY,    "order_creater" varchar(20) NOT NULL,    "order_date" datetime NOT NULL);CREATE TABLE "orders_orderdetail" (    "id" integer NOT NULL PRIMARY KEY,    "order_id" integer NOT NULL REFERENCES "orders_order" ("id"),    "detail_lineNO" integer NOT NULL,    "order_SKU" varchar(50) NOT NULL);COMMIT;

?然后执行

python manage.py syncdb

?这样就能建好表了。

然后我们现在可以测试我们的类。选择项目。右键。Django->shell with django environment. 就会出现命令行式的python窗口。会载入settings,py的设置

我们建一个类

>>>import datetime>>>from DjangoTest.orders.models import Order>>>o = Order(order_creater='ezio',order_date=datetime.datetime.now())>>>o<Order: Order object>

?可以看到默认的输出看不出来的。这个时候在类中加__unicode__的方法,类似java的tostring

def __unicode__(self):        return '%s created at %s' % (self.order_creater,self.order_date)

?这样就可以看到比较清晰的输出

>>>>>>order.is_order_today()
true
?<Order: ruan created at 2011-03-10 16:28:26.059955>

但是我发现有个时间不对头,应该是时区设置的问题。

在settings,py 里面 将时区改成上海。默认是美国的

TIME_ZONE = 'Asia/Shanghai'

??也可以写一个方法。

def is_order_today(self):        return self.order_date.date() == datetime.date.today()

?然后

>>>order.is_order_today()true
?

这样是比较方便的一种

?

然后是关于主外建的关系。这里我们设置了order和orderdetail是一对多的关系。这个可以从建表语句看出来

默认的model保存,都会成成一个id。而如果是外建关联。这个外建就算model的名字_id。

那么怎么样去生成一个外建关联的实体呢?

#先通过主键获取到一个主model>>>o = Order.objects.get(pk=1)#建立2个实体>>>o.orderdetail_set.create(detail_lineNO=1,order_SKU='gril')>>>o.orderdetail_set.create(detail_lineNO=2,order_SKU='boy')#输出>>>OrderDetail.objects.all()[<OrderDetail: OrderDetail object>, <OrderDetail: OrderDetail object>]#这里没有写Orderdetail的__unicode__方法。但是可以看出来有2个实体
?

?

读书人网 >编程

热点推荐