上一个笔记写了怎么样把管理员模块给添加到网站管理里面,现在来说一下怎么样去建立一个自己的模块
在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个实体
分享到:
相关推荐
Django学习笔记.pdf
django学习笔记django学习笔记django学习笔记
个人总结的Django学习笔记, 持续更新中。 目前只是总结了django的一部分学习逻辑。
一起学习django,希望对你有帮助
django学习笔记,包含安装、setting详解 admin自定义管理、数据类型、视图、restfromework、认证权限等
Django学习笔记月伴之夜,学习django的成果的代码演示
Django学习笔记--阉割版
b站学习千锋教育的django视频,其中的学习笔记
PythonDjango学习笔记Python简单运用(二).docx
django 学习笔记(1)—— python和web开发框架(csdn)————程序
学习Django框架时自己总结的文档,内含知识点,代码,案例。
本电子书是自己学习django的学习笔记,案例主要是通过django这个框架,来学习博客的搭建详细过程,本电子书为第一部分,后续会持续上传,有需要的朋友可以了解,相互学习。
django学习
django学习笔记,doc格式,共15章+sql操作命令。从别人的blog上自己复制粘贴下来整理好共享给大家。
Python编程:从入门到实践==》django学习笔记,learning_log项目。
PythonDjango学习笔记软件下载及安装(一).pdf
PythonDjango学习笔记软件下载及安装(一)参照.pdf